在錄製的VBA宏中,似乎它們的公式使用了R1C1 reference style
。例如,填補B4
與B2+1
:關閉記錄的VBA宏的R1C1參考樣式
Range("B4").Select
ActiveCell.FormulaR1C1 = "=R[-2]C+1"
有誰知道它是否可以關閉此模式?例如,讓錄製的宏看起來像:
Range("B4").Select
ActiveCell.Formula = "=B2+1"
在錄製的VBA宏中,似乎它們的公式使用了R1C1 reference style
。例如,填補B4
與B2+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的...
使用相對引用是還在那兒。它位於「停止錄製」下方的功能區,但不影響R1C1風格。 – DJA 2016-03-11 11:22:34