Board logo

標題: 可以請教當欄位不是固定在一個位置我要如何copy到第2活頁 [打印本頁]

作者: hu0318s    時間: 2013-11-26 23:34     標題: 可以請教當欄位不是固定在一個位置我要如何copy到第2活頁

我們家的資料常常會不是固定欄位,我有用if 去抓它的位子,但無法回傳位子訊息給我,所以要請教大大们,我可以用何方式抓取我要的欄位在copy到另一個活頁簿
作者: Hsieh    時間: 2013-11-26 23:48

回復 1# hu0318s
  1. Sub ex()
  2. Dim A As Range
  3. With Sheet1
  4. Set A = .Cells.Find("工令", lookat:=xlWhole)
  5. If Not A Is Nothing Then A.CurrentRegion.Copy Sheet2.[A1]
  6. End With
  7. End Sub
複製代碼

作者: hu0318s    時間: 2013-11-27 00:24

謝謝大大 我還是新手所以我把我想的打給你看看  
Dim A As Range    = 設定 a 為 所有儲存格
With Sheet1       =陳述 sheet1 所有訊息
Set A = .Cells.Find("工令", lookat:=xlWhole)    = 陣列a = .儲存格中該物件代表所找到的第一個包含所尋找資訊的儲存格(等於"工令", 發現要找的資料=要批配到資料)
If Not A Is Nothing Then A.CurrentRegion.Copy Sheet2.[A1]  = 如果 not找不到 則a就不執行 否則 a 就是到位置執行ctrl+a copy到第2活頁簿
End With  =結束陳述
不知我的了解是否有誤
作者: GBKEE    時間: 2013-11-27 13:50

回復 3# hu0318s
  1. Sub ex()
  2. Dim A As Range   'DIM (宣告為私用變數) A  AS(指定變數型態) Range '可參考VBA Range 屬性 的說明
  3. With Sheet1      'With 陳述式 在一個單一物件或一個使用者自訂型態上執行一系列的陳述式
  4.     Set A = .Cells.Find("工令", lookat:=xlWhole)
  5.     'a =>Range  .儲存格中該物件代表所找到的第一個包含所尋找資訊的儲存格(等....
  6.     If Not A Is Nothing Then A.CurrentRegion.Copy Sheet2.[A1]
  7.     'Not A Is Nothing :Not (邏輯否定。返轉, 不是) A Is Nothing(A 是 空的變數) -> 有找到
  8. End With
  9. End Sub
複製代碼

作者: hu0318s    時間: 2013-11-27 22:40

報歉剛下班,謝謝大大的教導,我可以在請教一下,如果我只要工令跟品名貼到sheet2 ,我剛剛有試過
With Sheet1
Set A = .Cells.Find("工令", lookat:=xlWhole)
If Not A Is Nothing Then A.End(xlDown).Copy Sheet2.[A1]
Set A = .Cells.Find("品名", lookat:=xlWhole)
If Not A Is Nothing Then A.End(xlDown).Copy Sheet2.[b1]
End With
End Sub
為何無法copy "工令"下面,跟"品名"全部, 它只copy 最近一格有訊息的資料貼到sheet2  ,報歉又麻煩大大们
作者: ML089    時間: 2013-11-27 22:44

我也來練習一下
  1. Sub ex2()
  2.     Dim A As Range
  3.     With Sheet1
  4.         Set A = .Cells.Find("工令", lookat:=xlWhole)
  5.         If Not A Is Nothing Then
  6.             Set t = A.CurrentRegion
  7.             t.Offset(0, 1).Resize(t.Rows.Count, 1).Copy Sheet3.[A1]
  8.             t.Offset(0, 3).Resize(t.Rows.Count, 1).Copy Sheet3.[B1]
  9.         End If
  10.     End With
  11. End Sub
複製代碼

作者: hu0318s    時間: 2013-11-28 08:38

回復 6# ML089


   大大報歉,我剛剛試過但它只會copy另件料號,我有試過改  t .Offset(0, 0).Resize(t.Rows.Count, 1).Copy Sheet3.[A1]  ,它只會copy"工令", 但如果要copy"品名"就無法照我要的copy到sheet3.[b2] ,請問我還要修改那邊才會讓電腦帶出我指定欄位,感謝大大们的幫忙
作者: GBKEE    時間: 2013-11-28 10:05

回復 7# hu0318s
請附檔,可了解你所說的問題
作者: hu0318s    時間: 2013-11-28 10:21

回復 8# GBKEE

情況如果是這樣
作者: GBKEE    時間: 2013-11-28 10:32

回復 9# hu0318s
  1. 'End 屬性 傳回 Range 物件,該物件代表包含來源範圍之區域結尾處的儲存格。
  2. '等於按 END+向上鍵、END+向下鍵、END+向左鍵或 END+向右鍵。唯讀 Range 物件。
  3. Sub Ex2()
  4.     Dim A As Range
  5.     With Sheet1
  6.         Set A = .Cells.Find("工令", lookat:=xlWhole)
  7.         If Not A Is Nothing Then
  8.              .Range(A, A.End(xlDown)).Copy Sheet3.[A1]
  9.         End If
  10.         Set A = .Cells.Find("品名", lookat:=xlWhole)
  11.         If Not A Is Nothing Then
  12.              .Range(A, A.End(xlDown)).Copy Sheet3.[B1]
  13.         End If
  14.     End With
  15. End Sub
複製代碼

作者: ML089    時間: 2013-11-28 16:59

回復 9# hu0318s

如果不是整齊的資料塊,只能像10#GBKEE大的方式,一般情況應該是比較少這樣放資料
作者: hu0318s    時間: 2013-11-28 18:49

回復 10# GBKEE


    謝謝大大,解開我的疑慮,感謝大大的幫忙
作者: GBKEE    時間: 2013-11-29 08:59

回復 11# ML089
  1. Option Base 1
  2. Sub Ex()
  3.     Dim AR(), i As Integer, A As Range
  4.     AR = Array("工令", "品名", "MRP料齊日")
  5.     With Sheet1
  6.         For i = 1 To UBound(AR)
  7.             Set A = .Cells.Find(AR(i), lookat:=xlWhole)
  8.             If Not A Is Nothing Then .Range(A, A.End(xlDown)).Copy Sheet3.Cells(1, i)
  9.         Next
  10.     End With
  11. End Sub
複製代碼

作者: ML089    時間: 2013-11-29 09:38

回復 13# GBKEE

GBKEE大 讚, 感謝指教,又學一招

AR = Array("工令", "品名", "MRP料齊日") 將要找的放在陣列中,將能程式碼構架化後就能彈性查詢。
作者: hu0318s    時間: 2013-12-1 00:55

本帖最後由 GBKEE 於 2013-12-1 16:16 編輯

[attach]16909[/attach][attach]16910[/attach]回復 13# GBKEE


    謝謝大大的教導,但我假設我的檔案book1,xls 在c:\  我一樣要copy"工令" "品名" "MRP料齊日" 到桌面上的BOOK2.XLS ,但我修改過粉多方式還會出現下面的問題,報歉我又要麻煩大大们

[attach]16908[/attach]
作者: GBKEE    時間: 2013-12-1 16:33

本帖最後由 GBKEE 於 2013-12-1 16:35 編輯

回復 15# hu0318s
  1. Option Base 1
  2. Sub Ex()
  3.     Dim AR(), i As Integer, A As Range
  4.      AR = Array("工令", "品名", "MRP料齊日")
  5.     With Workbooks.Open(Filename:="C:\book1.xls") '檢查看看 C:有book1.xls嗎?
  6.         For i = 1 To UBound(AR)
  7.             Set A = .Worksheets("sheet1").Cells.Find(AR(i), lookat:=xlWhole)
  8.             If Not A Is Nothing Then .Worksheets("sheet1").Range(A, A.End(xlDown)).Copy Workbooks("book2.xls").Worksheets("Sheet3").Cells(1, i)
  9.             '如這程式碼是Workbooks("book2.xls")專案的程式碼
  10.             'If Not A Is Nothing Then .Worksheets("sheet1").Range(A, A.End(xlDown)).Copy Sheet3.Cells(1, i)
  11.             'Sheet3 是工作表物件的名稱 無法用Workbooks("book2.xls").Sheet3
  12.             '需是Workbooks("book2.xls").Worksheets("工作表名稱")
  13.         Next
  14.         .Close False
  15.     End With
  16. End Sub
複製代碼

作者: hu0318s    時間: 2013-12-1 19:07

回復 16# GBKEE


    謝謝大大的幫忙,原來我一直想說用activesworkbook方式,去取的我要的訊息,謝謝大大的教導讓我學習更多新vba 寫法  謝謝你
作者: hu0318s    時間: 2013-12-3 00:30

本帖最後由 hu0318s 於 2013-12-3 00:32 編輯

回復 16# GBKEE


    抱歉我在練習時發現我用大大交的程式練習,發現我用worksheets("a線生產排程"),a的變數會抓不到,但我練習用worksheets.add   worksheets("sheet1"),a的變數可以帶入,我有點搞不清楚是我原本檔案有人家設定住,還是因我"a線生產排程"他不是真的sheet1 ,抱歉又麻煩大大們
[attach]16936[/attach][attachimg]16936[/attachim[attach]16937[/attach]g]
作者: GBKEE    時間: 2013-12-3 15:14

回復 18# hu0318s

[attach]16940[/attach]
作者: hu0318s    時間: 2013-12-4 20:44

回復 19# GBKEE


   謝謝大大的指導,我在去看一下書如何處理保護的情況,謝謝大大的幫忙
作者: hu0318s    時間: 2013-12-6 00:19

回復 19# GBKEE


    報歉又在麻煩大大,我在練習時碰到我的資料如果不是像上次一樣是連續性的,中間會有空白欄位 我爬過文 http://forum.twbts.com/viewthread.php?tid=4972&highlight=END
Sub Ex()
    Dim Rng As Range
    Set Rng = [B5:B50]
    Set Rng = Rng.SpecialCells(xlCellTypeConstants)   
    Set Rng = Rng.Areas(Rng.Areas.Count)
    Rng.Cells(Rng.Rows.Count, 1).Select
報歉真的不太了解這段訊息的意義,我執行過可以抓到資料到最後一行,也努力去了解,想辦法套進去程式內,也試過用Range("a65536"),end(xlup)抓取資料,但都無法成功,所以要麻煩大大指導
作者: GBKEE    時間: 2013-12-6 14:54

回復 21# hu0318s
SpecialCells 方法   傳回 Range 物件,此物件代表與指定型態及值相符合的所有儲存格。Range 物件。
EntireColumn 屬性 傳回 Range 物件,該物件代表包含該指定範圍的整個欄 (或若干欄)。
Areas 屬性         傳回 Areas 集合,此集合代表多重範圍中的所有範圍。
  1. Option Base 1
  2. Sub Ex2()
  3.     Dim ar(), i As Integer, a As Range
  4.     Sheet2.[a:x].Clear
  5.     ar = Array("T1", "T2", "t3")
  6.     With Workbooks.Open(Filename:="C:\123.xls")
  7.         For i = 1 To UBound(ar)
  8.             Set a = .Worksheets("data").Cells.Find(ar(i), lookat:=xlWhole)
  9.             If Not a Is Nothing Then a.EntireColumn.SpecialCells(xlCellTypeConstants).Copy Worksheets(2).Cells(1, i)
  10.         Next
  11.        .Close False
  12.     End With
  13. End Sub
複製代碼

作者: hu0318s    時間: 2013-12-8 00:22

本帖最後由 hu0318s 於 2013-12-8 00:28 編輯

回復 22# GBKEE


    謝謝大大的指導,我剛剛學到粉多新的知識,我可以在請問一下嗎, 我要去那邊看RANGE 的方式跟屬性,像你這樣可以查到它的方,報歉又要麻煩大大你教導我一下,還有世面上有賣這樣的書嗎?
我去圖書館借這板EXCEL VBA 功能索引式參考手冊,但好像沒啥用所以要請問一下要去那邊書籍才有下面的訊息
SpecialCells 方法   傳回 Range 物件,此物件代表與指定型態及值相符合的所有儲存格。Range 物件。
EntireColumn 屬性 傳回 Range 物件,該物件代表包含該指定範圍的整個欄 (或若干欄)。
Areas 屬性         傳回 Areas 集合,此集合代表多重範圍中的所有範圍。
作者: GBKEE    時間: 2013-12-8 12:57

回復 23# hu0318s
不必捨近求遠

[attach]17008[/attach]
作者: hu0318s    時間: 2013-12-9 21:46

回復 24# GBKEE


    謝謝大大的教導,我會在努力學習 愛死你們拉:)
作者: chihta25    時間: 2013-12-28 13:07

感謝大大無私分享




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)