Board logo

標題: 請教巨集的語意 [打印本頁]

作者: b9208    時間: 2010-5-26 16:14     標題: 請教巨集的語意

本帖最後由 GBKEE 於 2011-7-22 10:20 編輯

各位先進好!
請教下列式子中,Set B及A.Offset(, 2)這二行的意思為何?

With Sheets(Sh)
If Application.CountA(.Range("B7:B65536")) = 0 Then
    For Each A In .Range(.[B7], .[B65536].End(xlUp))
      With Sheets(Dh)
       d(A.Value) = d(A.Value) + 1
      Set B = .Columns("A").Find(A, lookat:=xlWhole).Offset(, 6)
      A.Offset(, 2).Resize(, 24).Copy B.Offset(d(A.Value), 0)
     
     End With
    Next A
  End If
End With

非常感謝
作者: Hsieh    時間: 2010-5-26 16:25

回復 1# b9208


    Set B = .Columns("A").Find(A, lookat:=xlWhole).Offset(, 6)'在a欄找到A值的位置向右6格的位置設給變數B
      A.Offset(, 2).Resize(, 24).Copy B.Offset(d(A.Value), 0)   'A儲存格向右2格擴展成1列24欄範圍複製到B儲存格向下位移d(A.Value),列的位置
作者: GBKEE    時間: 2010-5-26 16:44

本帖最後由 GBKEE 於 2011-7-22 10:24 編輯

回復 1# b9208
將物件的引用指定給變數  必須用 Set 開頭
例 Set A=Sheets("sheet1").Range("B2:B10")  指定給變數A 為Sheets("sheet1").Range("B2:B10")的範圍
Offset 傳回根據所指定的儲存格位址、列距及欄距而算出的參照位址  也就是根據所指定的儲存格位址的位移
試試下列程序應可明嘹
Sub Ex()
    Set A = Sheets("sheet1").Range("B2:B10")
    MsgBox A.Offset(1, 2).Address  '1為列距 2為欄距
End Sub
作者: b9208    時間: 2010-5-27 17:43

非常感謝二位前輩指導
Set B = .Columns("A")這裡A是指 Sheets(Sh)內儲存格)
A.Offset...(這裡A是指 Sheets(Sh)內儲存格資料) .Copy B.Offset (這裡B是指 Sheets(Dh)內Range)
謝謝
作者: Hsieh    時間: 2010-5-27 18:32

非常感謝二位前輩指導
Set B = .Columns("A")這裡A是指 Sheets(Sh)內儲存格)
A.Offset...(這裡A是指 Shee ...
b9208 發表於 2010-5-27 17:43



   錯!
Set B = .Columns("A")是With Sheets("Dh")區段內的敘述
.Columns("A")就是 Sheets("Dh").Columns("A")的意思
是Sheets("Dh")的A欄
A.Offset這裡的A是Sheets("Sh").Range(.[B7], .[B65536].End(xlUp))的每一格
作者: b9208    時間: 2010-5-27 21:27

Set B = .Columns("A").Find(A, lookat:=xlWhole).Offset(, 6)
'在a欄找到A值的位置向右6格的位置設給變數B
上述中〞a欄〞及〞A值〞都是在With Sheets("Dh")區段內嗎?
不理解〞在a欄找到A值的位置〞
作者: Hsieh    時間: 2010-5-27 21:54

回復 6# b9208


    With Sheets(Sh)
If Application.CountA(.Range("B7:B65536")) = 0 Then
    For Each A In .Range(.[B7], .[B65536].End(xlUp))

      With Sheets(Dh)
      d(A.Value) = d(A.Value) + 1
      Set B = .Columns("A").Find(A, lookat:=xlWhole).Offset(, 6)
      A.Offset(, 2).Resize(, 24).Copy B.Offset(d(A.Value), 0)      
      End With

    Next A
  End If
End With
紅字是Sheets(Dh)區段
藍色字是Sheets(Sh)區段
所以For Each A In .Range(.[B7], .[B65536].End(xlUp))
這個A是變數是Sheets(Sh).Range(.[B7], .[B65536].End(xlUp))的每個儲存格
作者: b9208    時間: 2010-5-27 23:12

感謝指導
我把 Columns("A") 與 Each A,前者A欄,後者變數A。
如把變數A改為變數H,應該比較清楚。
With Sheets(Sh)
If Application.CountA(.Range("B7:B65536")) = 0 Then
    For Each H In .Range(.[B7], .[B65536].End(xlUp))
      With Sheets(Dh)
      d(H.Value) = d(H.Value) + 1
      Set B = .Columns("A").Find(H, lookat:=xlWhole).Offset(, 6)
      H.Offset(, 2).Resize(, 24).Copy B.Offset(d(H.Value), 0)      
      End With
    Next H
  End If
End With




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