gpt4 book ai didi

vba - ActiveCell.Offset 困惑

转载 作者:行者123 更新时间:2023-12-01 19:56:47 25 4
gpt4 key购买 nike

我正在阅读某人编写的上一个模块中的一些 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

无论您选择什么范围,这都会打印所选内容中白色单元格的地址。

enter image description here

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”的命名范围,我们可以准确地了解正在发生的情况:

  1. 在此示例中,Range("Start").Select 将选择范围 A2:B4。从而使 ActiveCell 等于 A2

  2. 接下来我们在 ActiveCell 上调用 Offset(1,0) ,这相当于 Range("A2").Offset(1,0 ) 将我们置于 A3 范围(A2 下面 1 行)

  3. 现在我们调用 .Range("A1") 它将抓取范围内的第一个单元格。由于当前范围 A3.Range("A1") 为我们提供 A3

  4. 那么当然.Select()仍然只选择A3

什么时候.Range("A1")真正有用?

考虑以下没有任何 Range("A1") 调用的示例:

Sub Macro3()
Sheets("Setup").Select
Range("Start").Select
Selection.Offset(1, 0).Select
End Sub

由于我们已将 ActiveCell 更改为 SelectionOffset(1,0) 将选择与“Start”相同的尺寸范围,只是偏移-ed 增加 1 行。

即:

如果这是“Start”的范围:

enter image description here

我们运行示例宏:

enter image description here

我们有相同尺寸的新选择。

但是,如果我们更改示例宏以包含 Range("A1"):

Sub Macro4()
Sheets("Setup").Select
Range("Start").Select
Selection.Offset(1, 0).Range("A1").Select
End Sub

enter image description here

现在仅选择了所选内容中的第一个单元格。

关于vba - ActiveCell.Offset 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com