Excel 用于选择 VBA 模块的单元格公式范围规则
Excel cell formula scope rules for selecting VBA modules
假设我有一个启用了宏的 Excel 工作簿 Q.xlsm
,其中包含两个用户定义的模块 A
和 B
,并且每个模块都有一个 public 名为 xyz()
的函数,其中 A::xyz()
returns 一个 STRING
对象,B::xyz()
returns 一个 INTEGER
值。
Q.xlsm
`-- Modules
|-- A
| `-- Public Function xyz() As String
`-- B
`-- Public Function xyz() As Integer
Q1) 允许我调用 A::xyz()
或 B::xyz()
的工作表单元格公式范围语法是什么?
另一种情况是两个启用宏的工作簿 P.xlsm
和 Q.xlsm
,每个工作簿都有一个用户定义的模块 A
,具有 public 函数 xyz()
.假设工作簿 P
保存为加载项模块 P.xlam
,并且该加载项实际上是 "added in" 到 Excel(例如,文件 > 选项... > 加载项 > ...)。现在,当我打开工作簿 Q.xlsm
时,我有两个 public 函数 P.xlam::A::xyz()
和 Q::A::xyz()
,
P.xlam (add-in)
|-- Modules
| `-- A
| `-- Public Function xyz() As String
Q.xlsm
`-- Modules
`-- A
`-- Public Function xyz() As Integer
Q2) 如果我在工作表单元格中输入 =xyz()
,我如何知道调用了哪个函数(即,VBA 函数名称的作用域规则是什么?工作表单元格)?
Q3) 我在工作表单元格公式中使用什么语法来调用 P.xlam::A::xyz()
或 Q.xlsm::A::xyz()
?
Q1) What is the worksheet cell formula scoping syntax that allows me to invoke either A::xyz()
or B::xyz()
?
A1) 工作表单元格公式范围语法似乎是 MODULE_NAME.FUNCTION_NAME()
,例如
=A.xyz() // Returns the String object
=B.xyz() // Returns the Integer value
Q2) If I enter =xyz()
into a worksheet cell [in workbook Q.xlsm
] , how do I know which function is invoked (i.e., what are the scope rules for VBA function names within worksheet cells)?
A2) 在使用 Excel 2016 进行一些测试后,在工作簿 Q.xlsm
的工作表单元格内调用 =xyz()
会调用加载项版本 P.xlam!A.xyz()
而不是 Q.xlsm!A.xyz()
.
Q3) What syntax do I use in the worksheet cell formula [in workbook Q.xlsm
] to invoke either P.xlam::A::xyz()
or Q.xlsm::A::xyz()
?
A3) 范围语法似乎是 WORKBOOK_FILE_NAME!MODULE_NAME.FUNCTION_NAME()
,
=P.xlam!A.xyz() // returns STRING, becomes `=A.xyz()`
=Q.xlsm!A.xyz() // returns INTEGER
如果函数 xyz()
未在工作簿 Q.xlsm
的任何其他模块中重载,则 shorthand 作用域语法 WORKBOOK_FILE_NAME!FUNCTION_NAME()
也有效,例如,
=P.xlam!xyz() // returns STRING, becomes `=xyz()`
=Q.xlsm!xyz() // returns INTEGER
编辑 2017-11-27
可以在单元格公式中使用的另一个有用的范围语法:
'[workbook_file_path]worksheet_name'!range_within_worksheet_name
示例:
'[C:\Temp\Workbook1.xlsx]Scores'!$B
'[Workbook2.xlsx]Roster'!Teams
如果有人知道描述 "this workbook's full path" 并且适合用作“[workbook_file_path]”字段的内置快捷语法,请发表评论。 (n.b., 我不是在谈论创建一个使用 =CELL("filename",A1)
或其变体的 INDIRECT()
组合。)
假设我有一个启用了宏的 Excel 工作簿 Q.xlsm
,其中包含两个用户定义的模块 A
和 B
,并且每个模块都有一个 public 名为 xyz()
的函数,其中 A::xyz()
returns 一个 STRING
对象,B::xyz()
returns 一个 INTEGER
值。
Q.xlsm
`-- Modules
|-- A
| `-- Public Function xyz() As String
`-- B
`-- Public Function xyz() As Integer
Q1) 允许我调用 A::xyz()
或 B::xyz()
的工作表单元格公式范围语法是什么?
另一种情况是两个启用宏的工作簿 P.xlsm
和 Q.xlsm
,每个工作簿都有一个用户定义的模块 A
,具有 public 函数 xyz()
.假设工作簿 P
保存为加载项模块 P.xlam
,并且该加载项实际上是 "added in" 到 Excel(例如,文件 > 选项... > 加载项 > ...)。现在,当我打开工作簿 Q.xlsm
时,我有两个 public 函数 P.xlam::A::xyz()
和 Q::A::xyz()
,
P.xlam (add-in)
|-- Modules
| `-- A
| `-- Public Function xyz() As String
Q.xlsm
`-- Modules
`-- A
`-- Public Function xyz() As Integer
Q2) 如果我在工作表单元格中输入 =xyz()
,我如何知道调用了哪个函数(即,VBA 函数名称的作用域规则是什么?工作表单元格)?
Q3) 我在工作表单元格公式中使用什么语法来调用 P.xlam::A::xyz()
或 Q.xlsm::A::xyz()
?
Q1) What is the worksheet cell formula scoping syntax that allows me to invoke either
A::xyz()
orB::xyz()
?
A1) 工作表单元格公式范围语法似乎是 MODULE_NAME.FUNCTION_NAME()
,例如
=A.xyz() // Returns the String object
=B.xyz() // Returns the Integer value
Q2) If I enter
=xyz()
into a worksheet cell [in workbookQ.xlsm
] , how do I know which function is invoked (i.e., what are the scope rules for VBA function names within worksheet cells)?
A2) 在使用 Excel 2016 进行一些测试后,在工作簿 Q.xlsm
的工作表单元格内调用 =xyz()
会调用加载项版本 P.xlam!A.xyz()
而不是 Q.xlsm!A.xyz()
.
Q3) What syntax do I use in the worksheet cell formula [in workbook
Q.xlsm
] to invoke eitherP.xlam::A::xyz()
orQ.xlsm::A::xyz()
?
A3) 范围语法似乎是 WORKBOOK_FILE_NAME!MODULE_NAME.FUNCTION_NAME()
,
=P.xlam!A.xyz() // returns STRING, becomes `=A.xyz()`
=Q.xlsm!A.xyz() // returns INTEGER
如果函数 xyz()
未在工作簿 Q.xlsm
的任何其他模块中重载,则 shorthand 作用域语法 WORKBOOK_FILE_NAME!FUNCTION_NAME()
也有效,例如,
=P.xlam!xyz() // returns STRING, becomes `=xyz()`
=Q.xlsm!xyz() // returns INTEGER
编辑 2017-11-27
可以在单元格公式中使用的另一个有用的范围语法:
'[workbook_file_path]worksheet_name'!range_within_worksheet_name
示例:
'[C:\Temp\Workbook1.xlsx]Scores'!$B
'[Workbook2.xlsx]Roster'!Teams
如果有人知道描述 "this workbook's full path" 并且适合用作“[workbook_file_path]”字段的内置快捷语法,请发表评论。 (n.b., 我不是在谈论创建一个使用 =CELL("filename",A1)
或其变体的 INDIRECT()
组合。)