Vba 活动单元格。抵消混乱
我在读前一个模块中的一些VBA,有人写了这个模块,遇到了一些让我困惑的东西:Vba 活动单元格。抵消混乱,vba,excel,Vba,Excel,我在读前一个模块中的一些VBA,有人写了这个模块,遇到了一些让我困惑的东西: Sheets("Setup").Select Range("Start").Select ActiveCell.Offset(1, 0).Range("A1").Select 我想知道ActiveCell.Offset(column,row).Range().Select line是如何工作的。在本例中,“开始”范围是一个单元格A18,偏移量将其偏移一行,这就是我得到的。但我并没有关注插入范围(“A1”)的方式或内容
Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Range("A1").Select
我想知道ActiveCell.Offset(column,row).Range().Select line是如何工作的。在本例中,“开始”范围是一个单元格A18,偏移量将其偏移一行,这就是我得到的。但我并没有关注插入范围(“A1”)的方式或内容
不会
Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Select
照样工作,减少混乱?是否有任何理由插入范围(“A1”)条款
非常感谢,对于初学者的问题,我很抱歉 简短回答
是的,在这种特殊情况下,两者的作用相同。移除范围(“A1”)
即可
长话短说
这是因为您在此行中使用了ActiveCell
:
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell
是所选范围内的第一个单元格
考虑以下宏:
Sub Macro1()
Debug.Print ActiveCell.Address
End Sub
无论选择哪个范围,此选项都将打印所选内容中白色单元格的地址
i、 e
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
)是“开始”的命名范围,我们可以准确地了解正在发生的事情:
A2:B4
。从而使ActiveCell
等于A2
ActiveCell
上调用Offset(1,0)
,它相当于Range(“A2”)。Offset(1,0)
将我们置于RangeA3
(A2下1行)
.Range(“A1”)
,它将获取范围内的第一个单元格。由于当前范围仅为A3
,.range(“A1”)
为我们提供了A3
.Select()
仍然只是选择A3
.Range(“A1”)
什么时候真正有用?
考虑以下没有任何范围(“A1”)
调用的示例:
Sub Macro3()
Sheets("Setup").Select
Range("Start").Select
Selection.Offset(1, 0).Select
End Sub
由于我们已将ActiveCell
更改为Selection
,Offset(1,0)
将选择与“Start”相同的尺寸范围,仅偏移1行
i、 e:
如果这是“开始”的范围:
我们运行示例宏:
我们有一个相同维度的新选择
但是,如果我们将示例宏更改为包含范围(“A1”)
:
现在只选择了所选内容中的第一个单元格。是的,它的工作原理相同,并且不那么混乱。:)谢谢Rory!关于范围(“A1”)部分,以及为什么它仍然执行相同的功能,您有什么想法吗?请参阅@chancea的答案了解其工作原理。至于原因:如果您在录制宏时选中了“使用相对引用”选项,则宏录制器会将其放在那里。很好的答案(+1)当然,
Resize()
也可以实现同样的效果,而且更清晰,依我看;)回答得好!谢谢你抽出时间。因此,我想我理解您关于“ActiveCell”而不是使用范围('Selection()')的解释:在两种不同的场景中,我们将单个单元格相对于整个范围移动一行。我不完全理解的是,为什么在代码行中包含范围(“A1”)不会改变代码行的结果。或者更确切地说,它告诉偏移函数要做什么。再次感谢@我试图更新和澄清。看我的edit@chancea所以偏移量(x,x).Range()
部分只是一个定义,用于定义将要使用的数组的大小,而不是对要选择的点的实际引用?对不起,我认为你解释得非常好,我只是无法准确理解Selection.Offset(1,0)。Select
vsSelection.Offset(1,0)。Range(“A1”)。Select
正在定义什么。在python中,我们看到open(“file.txt”,“a”)
a是open()函数的加数可选定义。在VBA中,是.Offset().xxx。选择,xxx是他输入范围()
的地方,这让我很困惑。
Sub Macro4()
Sheets("Setup").Select
Range("Start").Select
Selection.Offset(1, 0).Range("A1").Select
End Sub