gpt4 book ai didi

vba - 关闭录制的 VBA 宏的 R1C1 引用样式

转载 作者:行者123 更新时间:2023-12-03 00:32:17 25 4
gpt4 key购买 nike

在录制的 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 引用样式中,范围是根据单元格距您正在调用的单元格的距离来引用的。例如,如果从 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

注意:我在这里没有进行任何错误处理。我相信如果需要的话您可以将其纳入其中。

关于vba - 关闭录制的 VBA 宏的 R1C1 引用样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11707033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com