[英]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.