VBAProject 关键字是啥?
Posted
技术标签:
【中文标题】VBAProject 关键字是啥?【英文标题】:What's the VBAProject keyword?VBAProject 关键字是什么? 【发布时间】:2019-10-01 15:20:16 【问题描述】:在Object Browser 窗口中有一个正在使用的库列表。
默认自带:
Excel(Microsoft Excel 版本对象库) Office(Microsoft Office 版本对象库) stdole(OLE 自动化) VBA(适用于应用程序的 Visual Basic) VBA项目也可以通过使用 VBIDE 库(Microsoft Visual Basic for Applications Extensibility version)循环引用 VBProject 来找到它们,VBAProject 除外。
VBAProject 是库、特殊关键字还是其他?找不到任何文档。
我猜它也是 VBA 库的一部分,但它似乎没有出现在引用下方。
Dim ref As VBIDE.Reference
For Each ref In Application.VBE.VBProjects(1).References
MsgBox ref.Name & " - " & ref.Description
Next
VBAProject 具有工作簿和工作表的代号。
我也无法删除 manually 或 with code Excel 和 VBA 库来测试 VBAProject 是否会消失(Office 和 stdole 是可移动的)。
【问题讨论】:
【参考方案1】:它不是关键字,它是代表 VBA 项目的 COM 类型库的标识符。
编译 VBA 项目时,会在内部创建一个 COM 类型库 - 对象浏览器只是列出当前在编辑器中加载的所有类型库,其中包括您自己项目的库。
这就是它列出所有文档模块的“代号”的原因 - 如果您添加了一个标准模块,它也会在那里:
如果您重命名您的项目(recommended,尤其是对于任何 Excel 插件项目),那么它不再是 VBAProject
:
#FunFacts: 当 VBE 首次初始化并创建新的 VBA 项目时,它会在几毫秒内调用 VBProject
(VB6 默认项目名称) - VBE 然后将其重命名为 @987654326 @ ...这曾经导致 Rubberduck 出现问题!
【讨论】:
很好的答案马修。附带问题,如果您不太在意。您能否在答案中稍微解释一下 COM 类型库。阅读文档(作为外国人)有点令人困惑。看起来它定义了哪些对象属性和方法可以在运行时通过其他应用程序使用。例如,这是否包括非 VBA 的? 感谢您的深入解释和提示(我从未重命名任何项目)。据我了解,VBAProject
是一个已加载/正在运行的库,顾名思义,它就是 VBA 项目本身。
@JvdV 您在 VBA 中引用的任何库都是 COM 类型库; VBA 在 COM 中根深蒂固,您自己的 VBA 项目编译成这样的库 - 我只知道这一点,因为在 Rubberduck 上工作会让您深入了解 VBA 的内容......基本上从 VBA 运行时的角度来看,编译后的 VBA 代码是'与任何其他 COM 类型库并没有什么不同。 Office 2000“开发者版”甚至有一个功能,可以让您从 VBA 项目中构建一个 .dll。以上是关于VBAProject 关键字是啥?的主要内容,如果未能解决你的问题,请参考以下文章