ActiveCell.Offset混乱
我正在读一些有人写过的模块中的一些VBA,碰到一些令我困惑的东西:
Sheets("Setup").Select Range("Start").Select ActiveCell.Offset(1, 0).Range("A1").Select
我想知道如何ActiveCell.Offset(列,行).Range()。select行工作。 在这种情况下,“开始”范围是一个单元格A18,偏移量偏移一行,我得到了很多。 但是我并没有追踪Range(“A1”)在这里插入的方式或范围。
岂不
Sheets("Setup").Select Range("Start").Select ActiveCell.Offset(1, 0).Select
工作是一样的,减less混淆? Range(“A1”)子句是否有插入的原因?
非常感谢,对于初学者的问题感到抱歉。
简短的回答
是的, 在这种特殊情况下,两者都是一样的。 删除Range("A1")
是好的。
长答案
这是因为你在这一行使用ActiveCell
:
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell
是您所选范围内的第一个单元格。
考虑下面的macros:
Sub Macro1() Debug.Print ActiveCell.Address End Sub
无论select哪个范围,都将打印select内的白色单元格的地址。
即
ActiveCell
是$A$4
例
在一个单元格上调用Offset(1,0)
将只抵消该单元格 。 所以,如果我们看看你的原始代码:
Sub Macro2() Sheets("Setup").Select Range("Start").Select ActiveCell.Offset(1, 0).Range("A1").Select End Sub
让我们假设我之前的select( A2:B4
)是“开始”的命名范围,我们可以精确地看看发生了什么:
-
在范例
Range("Start").Select
范例中,select范围A2:B4
。 从而使ActiveCell
等于A2
。 -
接下来我们调用
ActiveCell
上的Offset(1,0)
,它等于Range("A2").Offset(1,0)
将我们放在范围A3
(A2下面的一行) -
现在我们调用将要抓取范围内第一个单元格的
.Range("A1")
。 由于当前范围只有A3
,.Range("A1")
给我们A3
。 -
那么当然
.Select()
仍然只selectA3
什么时候.Range("A1")
实际上有用?
考虑下面没有任何Range("A1")
调用的例子:
Sub Macro3() Sheets("Setup").Select Range("Start").Select Selection.Offset(1, 0).Select End Sub
由于我们已经改变了ActiveCell
的Selection
Offset(1,0)
将select相同的尺寸范围作为“开始”刚抵消1行。
即:
如果这是“开始”的范围:
我们运行示例macros:
我们有相同维度的新select。
但是,如果我们将示例macros更改为包含Range("A1")
:
Sub Macro4() Sheets("Setup").Select Range("Start").Select Selection.Offset(1, 0).Range("A1").Select End Sub
现在只select选区中的第一个单元格。