ActiveCell.Offset混乱

mbu*_*e05 2 excel vba excel-vba

我在之前的模块中读过一些VBA,有人写过这篇文章,并且遇到了让我困惑的事情:

Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Run Code Online (Sandbox Code Playgroud)

我想知道如何ActiveCell.Offset(列,行).Range().选择行工作.在这种情况下,"开始"范围是一个单元格,A18,并且偏移将其偏移一行,这是我得到的.但是我没有按照范围("A1")插入的方式或内容进行操作.

岂不

Sheets("Setup").Select
Range("Start").Select
ActiveCell.Offset(1, 0).Select
Run Code Online (Sandbox Code Playgroud)

工作一样,不那么混乱?是否有任何原因插入Range("A1")子句?

非常感谢,对初学者的问题感到抱歉.

cha*_*cea 9

简短的回答

是的,在这种特殊情况下都做同样的事情.删除Range("A1")很好.

答案很长

这是因为您ActiveCell在此行中使用的事实:

ActiveCell.Offset(1, 0).Range("A1").Select
Run Code Online (Sandbox Code Playgroud)

ActiveCell是您选择的范围内的第一个单元格.

考虑以下宏:

Sub Macro1()
    Debug.Print ActiveCell.Address
End Sub
Run Code Online (Sandbox Code Playgroud)

无论您选择哪个范围,都会在选择内打印白色单元格的地址.

在此输入图像描述

ActiveCellIS$A$4

调用Offset(1,0)单个细胞只能抵消该小区.因此,如果我们查看您的原始代码:

Sub Macro2()
    Sheets("Setup").Select
    Range("Start").Select
    ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
Run Code Online (Sandbox Code Playgroud)

让我们假设我之前的选择显示(A2:B4)是"开始"的命名范围,我们可以完全了解发生的事情:

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

  2. 接下来,我们呼吁Offset(1,0)有关ActiveCell这相当于Range("A2").Offset(1,0)把我们的范围A3(1行下面A2)

  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
Run Code Online (Sandbox Code Playgroud)

既然我们已经改变ActiveCellSelectionOffset(1,0)会选择相同的尺寸范围为"开始"只是1行偏移-ED.

即:

如果这是"开始"的范围:

在此输入图像描述

我们运行示例宏:

在此输入图像描述

我们有一个相同维度的新选择.

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

Sub Macro4()
    Sheets("Setup").Select
    Range("Start").Select
    Selection.Offset(1, 0).Range("A1").Select
End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在只选择选择中的第一个单元格.