跳到主要内容

使用相对引用录制宏

Excel 有两种录制宏方式:绝对引用和相对引用,它们在引用工作表中的单元格的方式上有所不同。无论当前选定的单元格如何,使用绝对引用录制的宏始终引用相同的单元格位置,而使用相对引用录制的宏引用与选定单元格偏移的单元格。

绝对引用

Excel 默认的录制宏方式是绝对引用。您可能知道,绝对引用通常用于公式中的单元格引用,当公式中的单元格引用是绝对引用时,如果把公式粘贴到新位置时它不会自动调整公式。在我们之前的录制你的第一个宏示例中,我们使用了绝对引用。

相对引用

相对引用意味着相对于当前活动的单元格。因此,无论是在录制相对引用宏时还是在运行宏时,都应谨慎选择活动单元格。

使用相对引用录制宏

在下面的示例中,我们使用相对引用来再次录制上节课的“HelloWorld”宏,看看有什么变化。

  1. 新建一个空白工作簿。Excel 默认选择单元格 A1。在录制之前,请确保选中单元格 A1
  2. 单击【开发工具】选项卡,在【代码】组中,单击【使用相对引用】。如果你的【开发工具】选项卡不可见,请参阅:启用开发工具选项卡
  3. 在【代码】组中单击【录制宏】命令,打开【录制宏】对话框。
  4. 在本例中,宏名:“HelloWorld”,快捷键填写小写 j,保存在当前工作簿,说明:“使用相对引用录制宏”。
    使用相对引用录制宏
    使用相对引用录制宏
  5. 单击【确定】关闭对话框并开始录制宏动作。
  6. 选择单元格 B1,在编辑栏里输入”Hello World!",并按 Enter 键结束输入,此时 Excel 会自动激活单元格 B2
  7. 选择【开发工具】选项卡,在【代码】组中选择【停止录制】命令(或单击状态栏最左边的【停止录制】按钮)。

录制完成,按 Alt+F11 组合键打开 VBE,双击左侧工程项目窗口的【模块1】,模块中的代码就会在右侧的代码窗口中显示出来。录制的宏代码类似如下代码:

Sub HelloWorld()
'
' HelloWorld 宏
' 使用相对引用录制宏
'
' 快捷键: Ctrl+j
'
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "Hello World!"
    ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

第 1 行:录制的宏是一个名为 HelloWorld 的子过程。

第 2 行到第 7 行是注释。请注意,Excel 在过程的顶部插入了一些注释。这些注释是出现在【录制宏】对话框中的一些信息。这些注释行以撇号(')开头并不是真正需要的,删除它们对宏的运行没有任何影响。

第 8 行:此语句以当前活动单元格(ActiveCell)为基准向右移动一个单元格(Offset(0, 1)),我们录制时的活动单元格是 A1,我们选择的单元格是 B1,B1 单元格相对于 A1 单元格就是向右移动了一格,此语句还记录了起始单元格为 A1。活动单元格的 Offset 属性告诉指针向上、向下、向左或向右移动多少个单元格。

第 9 行:此语句将您在录制时键入的文本插入到活动单元格中。

第 10 行:此语句以当前活动单元格(ActiveCell)为基准向下移动一个单元格(Offset(1, 0))。

第 11 行:这表示宏的结束。

这个相对引用宏代码中完全没有指向任何具体单元格区域的引用(除了起始单元格 A1,而且完全可以删除)。

下面来看运行下这个宏,看看效果:

  • Alt+F11 返回 Excel。
  • 当 Excel 处于活动状态时,激活一个工作表,选择任意一个单元格。
  • 按下 Ctrl+J 组合键。

该宏会立即将 Hello World! 输入到您选择的单元格的右边一个单元格,并且激活输入 Hello World! 的下边的一个单元格。而我们之前用绝对引用录制的宏,不管你选择什么单元格,都固定在录制的单元格里输入文本。

下面我们把录制的起始单元格 A1 删除掉,并删除所有的注释来对比绝对引用和相对引用的代码有什么不同。

使用相对引用:

Sub HelloWorld()
    ActiveCell.Offset(0, 1).Select
    ActiveCell.FormulaR1C1 = "Hello World!"
    ActiveCell.Offset(1, 0).Select
End Sub

使用绝对引用:

Sub HelloWorld()
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Hello World!"
    Range("B2").Select
End Sub

我们看到使用相对引用录制的代码就是,把具体引的单元格地址,更换成相对于活动单元格地址的偏量。

所以要想让相对引用的宏能正确运行,需要确保:在运行宏前要选择正确的起始单元格。

当我们熟练的掌握了相对引用和绝对引用,我们就能在代码里既使用相对引用又使用绝对引用。

另外,我们优化下刚才的相对引用宏,核心代码就是:

Sub HelloWorld()
    ActiveCell.Offset(0, 1).FormulaR1C1 = "Hello World!"
End Sub

评论

您的电子邮件地址不会显示出来。*号为必填项。