关闭录制的VBA宏的R1C1参考样式
在录制的VBA宏中,它们的公式似乎使用了关闭录制的VBA宏的R1C1参考样式,vba,excel,Vba,Excel,在录制的VBA宏中,它们的公式似乎使用了R1C1参考样式。例如,用B2+1填写B4: Range("B4").Select ActiveCell.FormulaR1C1 = "=R[-2]C+1" 有人知道是否可以关闭此模式吗?例如,让录制的宏看起来像: Range("B4").Select ActiveCell.Formula = "=B2+1" 我相信你不能那样做。宏将始终以R1C1样式记录 您始终可以切换样式,但它将仅应用于工作表,如果录制宏,它仍将显示R1C1参考样式 R1C1样式很
R1C1参考样式
。例如,用B2+1
填写B4
:
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混淆了
使用相对引用仍然存在。它位于功能区中“停止录制”的正下方,但不影响R1C1样式。