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

问题描述:

在录制的VBA宏中,似乎它们的公式使用了R1C1 reference style。例如,填补B4B2+1关闭记录的VBA宏的R1C1参考样式

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

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

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

我相信你不能这样做。宏将始终以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 

注意一个小功能:我没有做过任何错误处理在这里。如果需要,我相信你可以加入。

曾经有一种设备可以在录制宏时切换相对参考。

当您开始录制时,在宏工具栏中 - 停止按钮附近 - 有一个按钮可以切换相对引用;这与切换R1C1不一样吗?还是不再可用?

我从来没有打扰过自己像Siddharth所说的R1C1不太难理解,不管你做什么,VBA将需要一些编辑,所以如果你想使用其他语法很容易改变。

我只是打得四处以下,但它似乎并没有帮助,所以也许我混淆使用此按钮R1C1的...

enter image description here

+1

使用相对引用是还在那儿。它位于“停止录制”下方的功能区,但不影响R1C1风格。 – DJA 2016-03-11 11:22:34