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

时间:2012-07-29 05:54:32

标签: vba excel-vba excel

在录制的VBA宏中,似乎他们的公式使用R1C1 reference style。例如,使用B4填写B2+1

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

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

Range("B4").Select
ActiveCell.Formula = "=B2+1"

2 个答案:

答案 0 :(得分: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 :(得分:1)

录制宏时曾经有过设置来切换相对参考。

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

我从不打扰自己,就像Siddharth说的那样,R1C1并不太难理解,无论你做什么,VBA都需要进行一些编辑,所以如果你想使用其他语法就很容易足以改变。

我刚刚使用了以下内容,但它似乎没有帮助,所以也许我把这个按钮与R1C1混合使用......

enter image description here