[英]ActiveCell.Offset Confusion
我正在閱讀某人之前編寫的模塊中的一些 VBA 並遇到了一些讓我感到困惑的事情:
Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Range("A1").Select
我想知道 ActiveCell.Offset(column,row).Range().Select 行是如何工作的。 在這種情況下,“開始”范圍是一個單元格,A18,偏移量將它偏移一行,我得到了這么多。 但我沒有關注 Range("A1") 在這里插入的方式或內容。
不會
Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Select
工作相同並且不那么令人困惑? 插入 Range("A1") 子句是否有任何原因?
非常感謝,很抱歉初學者的問題。
是的,在這種特殊情況下,兩者都做同樣的事情。 刪除Range("A1")
很好。
這是因為您在這一行中使用了ActiveCell
:
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell
是您選擇的范圍內的第一個單元格。
考慮以下宏:
Sub Macro1()
Debug.Print ActiveCell.Address
End Sub
無論您選擇什么范圍,這都會打印所選內容中白色單元格的地址。
IE
ActiveCell
是$A$4
在單個單元格上調用Offset(1,0)
只會偏移該單元格。 因此,如果我們查看您的原始代碼:
Sub Macro2()
Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
讓我們假設我之前顯示的選擇( A2:B4
)是“開始”的命名范圍,我們可以准確地了解正在發生的事情:
在此示例中Range("Start").Select
將選擇范圍A2:B4
。 從而使ActiveCell
等於A2
。
接下來我們在ActiveCell
上調用Offset(1,0)
相當於Range("A2").Offset(1,0)
將我們置於范圍A3
(A2 下方的 1 行)
現在我們調用.Range("A1")
它將抓取范圍內的第一個單元格。 由於當前范圍只有A3
, .Range("A1")
給了我們A3
。
那么當然.Select()
仍然只選擇A3
.Range("A1")
真正有用? 考慮以下沒有任何Range("A1")
調用的示例:
Sub Macro3()
Sheets("Setup").Select
Range("Start").Select
Selection.Offset(1, 0).Select
End Sub
由於我們已將ActiveCell
更改為Selection
因此Offset(1,0)
將選擇與“Start”相同的尺寸范圍,只是偏移了 1 行。
IE:
如果這是“開始”的范圍:
我們運行示例宏:
我們有一個相同維度的新選擇。
但是,如果我們更改示例宏以包含Range("A1")
:
Sub Macro4()
Sheets("Setup").Select
Range("Start").Select
Selection.Offset(1, 0).Range("A1").Select
End Sub
現在只選擇了選擇中的第一個單元格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.