我在阅读上一个模块中的一些VBA时,发现了一些让我困惑的事情:
Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Range("A1").Select我想知道ActiveCell.Offset(列,行).Range().Select行是如何工作的。在本例中,"Start“范围是一个单元格A18,偏移量将它偏移一行,这就是我得到的结果。但是我并不理解在这里插入范围(“A1”)的方式和目的。
不会的
Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Select同样的工作,更少的困惑?插入Range("A1")子句有什么原因吗?
非常感谢,对于这个初学者的问题,我很抱歉。
发布于 2015-03-18 23:04:28
简短的回答
是的,在这种特殊情况下,两者都做同样的事情。删除Range("A1")是可以的。
长长的答案
这是因为您在下面一行中使用了ActiveCell:
ActiveCell.Offset(1, 0).Range("A1").SelectActiveCell是所选范围内的第一个单元格。
考虑下面的宏:
Sub Macro1()
Debug.Print ActiveCell.Address
End Sub无论您选择什么范围,这都将打印所选内容中白色单元格的地址。
即

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)是"Start“的命名范围,我们可以准确地遍历正在发生的事情:
在本例中,
Range("Start").Select将选择range A2:B4。从而使ActiveCell与A2.相等
接下来,我们在ActiveCell上调用Offset(1,0),这相当于Range("A2").Offset(1,0)将我们放在range A3 (比A2低1行)
现在,我们调用.Range("A1"),它将获取该范围内的第一个单元格。因为当前的范围是 A3,所以.Range("A1")给我们提供了range
当然,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行。
即:
如果这是“Start”的范围:

我们运行示例宏:

我们有一个相同尺寸的新选择。
但是,如果我们将示例宏更改为包含Range("A1")
Sub Macro4()
Sheets("Setup").Select
Range("Start").Select
Selection.Offset(1, 0).Range("A1").Select
End Sub

现在仅选定选定内容中的第一个单元格。
https://stackoverflow.com/questions/29125104
复制相似问题