首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在VBA的GetValue函数中使用单元格"A1“?

为什么在VBA的GetValue函数中使用单元格"A1“?
EN

Stack Overflow用户
提问于 2015-01-08 03:43:48
回答 3查看 1.9K关注 0票数 5

我使用此函数从已关闭的工作簿中检索值。在这段代码的第8行中,我不明白为什么要使用"A1“。这整个第8行到底发生了什么?我也被xlR1C1的论点搞糊涂了。

代码语言:javascript
运行
复制
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
EN

回答 3

Stack Overflow用户

发布于 2015-01-08 04:44:33

Range().Range() Documentation here

当应用于Range对象时,该属性相对于Range对象。例如,如果所选内容是单元格C3,则Selection.Range("B1")将返回单元格D3,因为它相对于Selection属性返回的Range对象。另一方面,代码ActiveSheet.Range("B1")总是返回单元格B1

代码使用第二个Range("A1")来确保如果您的ref区域大于一个单元格,则它只返回该区域的左上角单元格。另外,您的另一个名为ExecuteExcel4Macro()Sub似乎需要一个R1C1类型的单元格引用,因此地址将被转换为该类型,以便将arg字符串传递给Sub

票数 4
EN

Stack Overflow用户

发布于 2015-01-08 04:10:57

xlR1C1是一个reference style,用于指定公式的工作方式。使用此样式时,公式的工作方式和外观将与您预期的截然不同。R1C1规范基本上意味着使用行和列序号而不是字母名称来不同地引用单元格。例如,在使用xlR1C1时,您将使用=R2C2 (row2,第2列)访问单元格B2。另一个示例是,可以将单元格C10称为=R10C3

至于第8行发生了什么……您正在构造一个单元格引用,如下所示:(请注意,您的单元格引用将有所不同,因为其中有一个文件路径)

代码语言:javascript
运行
复制
='[Myfilename.xlsx]Sheet1'!R1C1

可以使用调试器查看arg变量中包含的字符串。

票数 1
EN

Stack Overflow用户

发布于 2015-01-08 04:19:44

Range("A1")添加到代码中似乎没有任何作用。在“即时”窗口中键入此命令将导致某些...意外的结果。

代码语言:javascript
运行
复制
?Range("B3").Range("A1").Address
$B$3

现在,我期望返回$A$1,但似乎函数的这一部分将返回Range(ref)的地址。

现在,使用ReferenceStyle参数调用Range.Address将产生这些结果。

代码语言:javascript
运行
复制
?Range("B3").Range("A1").Address(,,xlR1C1)
R3C2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27827384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档