“为什么是细胞?”;A1";是否在VBA中的此GetValue函数中使用?
我正在使用此函数从关闭的工作簿中检索值。在这段代码的第8行中,我不明白为什么要使用“A1”。整个第八线到底发生了什么?我也被xlR1C1参数弄糊涂了“为什么是细胞?”;A1";是否在VBA中的此GetValue函数中使用?,vba,excel,Vba,Excel,我正在使用此函数从关闭的工作簿中检索值。在这段代码的第8行中,我不明白为什么要使用“A1”。整个第八线到底发生了什么?我也被xlR1C1参数弄糊涂了 Private Function GetValue(path, file, sheet, ref) Dim arg As String If Right(path, 1) <> "\" Then path = path & "\" If Dir(path & file) = "" Then
Private Function GetValue(path, file, sheet, ref)
Dim arg As String
If Right(path, 1) <> "\" Then path = path & "\"
If Dir(path & file) = "" Then
GetValue = "File Not Found"
Exit Function
End If
arg = "'" & path & "[" & file & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
End Function
私有函数GetValue(路径、文件、工作表、参考)
作为字符串的Dim arg
如果正确(路径,1)“\”则路径=路径&“\”
如果Dir(路径和文件)=“”,则
GetValue=“未找到文件”
退出功能
如果结束
arg=“”&path&“[”&file&“]”&sheet&“!”&_
范围(参考)。范围(“A1”)。地址(,xlR1C1)
GetValue=ExecuteExcel4Macro(arg)
端函数
xlR1C1
是用于指定公式工作方式的。使用此样式时,公式的工作方式和外观将与您预期的大不相同。R1C1规范基本上意味着使用行和列序号而不是字母名称来不同地引用单元格。例如,当使用xlR1C1时,您可以使用=R2C2
(第2行第2列)访问单元B2。另一个例子是,单元C10可以被称为=R10C3
至于8号线发生了什么。。。您正在构建一个如下所示的单元格引用:(请注意,单元格引用将有所不同,因为其中包含一个文件路径)
您可以使用调试器查看arg
变量中包含的字符串。将范围(“A1”)
添加到代码中似乎没有任何作用。在即时窗口中键入此项会导致某些。。。意外的结果
?Range("B3").Range("A1").Address
$B$3
现在,我本来希望返回$A$1
,但这部分函数似乎将返回范围(ref)
的地址
现在,调用参数将产生这些结果
?Range("B3").Range("A1").Address(,,xlR1C1)
R3C2
Range().Range()
:
当应用于范围
对象时,该属性相对于范围
对象。例如,如果选择是cellC3
,则selection.Range(“B1”)
返回cellD3
,因为它与selection
属性返回的Range
对象相关。另一方面,代码ActiveSheet.Range(“B1”)
总是返回单元格B1
代码使用第二个
范围(“A1”)
,以确保如果ref
范围大于一个单元格,则只返回该范围的左上角单元格。另外,您的另一个名为ExecuteExcel4Macro()
的Sub
似乎需要一个R1C1
类型的单元格引用,因此将地址转换为该类型,以便将arg
字符串传递到Sub
中,但这可能不是完全确定的,但在ref
是单元格集合的情况下,因此,它总是会返回一个值。我们需要查看ExecuteExcel4Macro()
代码以查看它需要什么输入。但是.Address()
之后的语法是:ExecuteExcel4Macro is->,尽管现在仍然使用Excel 4宏。。。可能是时候升级了。它对单个单元格范围没有任何作用,但对于多单元格范围(即范围(“C3:H99”)),它返回左上角的单元格。实际上,我刚刚了解到@Tmdean。
?Range("B3").Range("A1").Address(,,xlR1C1)
R3C2