2012-07-29 55 views
2

在錄製的VBA宏中,似乎它們的公式使用了R1C1 reference style。例如,填補B4B2+1關閉記錄的VBA宏的R1C1參考樣式

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

有誰知道它是否可以關閉此模式?例如,讓錄製的宏看起來像:

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

回答

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

+1

使用相對引用是還在那兒。它位於「停止錄製」下方的功能區,但不影響R1C1風格。 – DJA 2016-03-11 11:22:34