关闭录制的 VBA 宏的 R1C1 参考样式

问题描述 投票:0回答:3

在录制的VBA宏中,它们的公式似乎使用了

R1C1 reference style
。例如,用
B4
填充
B2+1

Range("B4").Select
ActiveCell.FormulaR1C1 = "=R[-2]C+1"

有谁知道是否可以关闭此模式?例如,让录制的宏看起来像:

Range("B4").Select
ActiveCell.Formula = "=B2+1"
vba excel
3个回答
5
投票

我相信你做不到。宏将始终以 R1C1 风格录制。

您可以随时切换样式,但它只会应用于工作表,如果您录制宏,它仍然会显示 R1C1 参考样式。

R1C1风格非常容易理解

在 R1C1 参考样式中,范围是根据单元格距您正在调用的单元格的距离来引用的。例如,如果从 R1C1 到 R5C1 有 5 个值,并且从 R7C2 调用范围,则范围将为 R[-6]C[-1]:R[-2]C[-1]。这里,区域中的第一个单元格位于单元格 R7C2 之前的 6 行和单元格 R7C2 之前的 1 列,区域中的最后一个单元格也类似。

如果我以你的例子为例,那么

"=R[-2]C+1"
意味着该公式引用的是向上两行(-2)且位于同一列(0)的行。你的公式与
"=R[-2]C[0]+1"

相同

编辑

这是我写的一个小函数,可以帮助您将 R1C1 转换为 A1 字符串

Sub Sample()
    '~~> This will give you $B$2
    Debug.Print R1C12A1("B4", "R[-2]C")

    '~~> This will give you E227
    Debug.Print R1C12A1("O9", "R[218]C[-10]", True)

    '~~> This will give you $Y$217
    Debug.Print R1C12A1("O9", "R[208]C[10]")
End Sub

Function R1C12A1(baseCell As String, sRC As String, Optional RemDollar As Boolean = False) As String
    Dim MyArray() As String
    Dim r As Long, c As Long

    sRC = Replace(sRC, "R", "")     

    If Left(sRC, 1) = "C" Then
        r = 0
    Else
        r = Replace(Replace(Split(sRC, "C")(0), "[", ""), "]", "")
    End If

    If Right(sRC, 1) = "C" Then
        c = 0
    Else
        c = Replace(Replace(Split(sRC, "C")(1), "[", ""), "]", "")
    End If

    If RemDollar = False Then
        R1C12A1 = Range(baseCell).Offset(r, c).Address
    Else
        R1C12A1 = Replace(Range(baseCell).Offset(r, c).Address, "$", "")
    End If
End Function

注意:我这里没有做任何错误处理。我相信如果需要的话您可以将其纳入其中。


1
投票

曾经有一个工具可以在录制宏时切换相对引用。

当您开始录制时,在宏工具栏中 - 停止按钮附近 - 有一个用于切换相对参考的按钮;这与切换 R1C1 不一样吗?或者这个不再可用了?

我从来没有费心去切换它,就像 Siddharth 说的那样,R1C1 并不太难理解,而且,无论你做什么,VBA 都需要一些编辑,所以同时如果你想使用其他语法,也很容易改变。

我刚刚尝试过以下操作,但它似乎没有帮助,所以也许我将此按钮与 R1C1 的使用混淆了......

enter image description here


0
投票

转到文件 -> 选项 -> 公式 -> 取消选中 R1C1 参考样式

© www.soinside.com 2019 - 2024. All rights reserved.