【发布时间】:2017-10-12 21:22:18
【问题描述】:
假设我有一个启用宏的 Excel 工作簿Q.xlsm,其中包含两个用户定义的模块A 和B,并且每个模块都有一个名为xyz() 的公共函数,其中A::xyz() 返回一个STRING 对象,并且B::xyz() 返回一个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 和一个公共函数xyz()。假设工作簿P 保存为加载项模块P.xlam,并且该加载项实际上是“添加”到 Excel 中的(例如,文件 > 选项... > 加载项 > ...) .现在,当我打开工作簿Q.xlsm 时,我有两个公共函数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 函数名称的范围规则是什么)? p>
Q3) 我在工作表单元格公式中使用什么语法来调用P.xlam::A::xyz() 或Q.xlsm::A::xyz()?
【问题讨论】:
-
据我所知,VBA 中没有官方的重载函数的方法。在您的第一种情况下,您可能会收到一条错误消息,而在第二种情况下,将调用同一工作簿中的宏,或者您收到一条错误消息。无论如何,使用同名函数是一种非常糟糕的做法。
-
为什么同一个xyz()用不同的函数
-
问题的重点是学习作用域规则和语言语法,而不是争论拥有多个名为 'xyz()' 的函数是否合理。在某些情况下(例如,在使用 3rd 方加载项时)确实会发生名称冲突,并且无法重新命名已发布的函数。