Excel 如何为后期绑定引用查找的名称

Excel 如何为后期绑定引用查找的名称,excel,vba,Excel,Vba,我正在尝试用Excel编写一个防弹应用程序。为了做到这一点,我希望尽可能添加后期绑定引用。不幸的是,我不知道如何确定我应该在所有引用中使用的正确名称 例如,可以引用文件系统对象,因此 Dim oFs as Object Set oFs = CreateObject("Scripting.FileSystemObject") 通过转到Microsoft的文档页面,我可以发现“Scripting.FileSystemObject”是不用谷歌搜索就可以使用的正确名称。但不存在对象

我正在尝试用Excel编写一个防弹应用程序。为了做到这一点,我希望尽可能添加后期绑定引用。不幸的是,我不知道如何确定我应该在所有引用中使用的正确名称

例如,可以引用文件系统对象,因此

Dim oFs as Object
Set oFs = CreateObject("Scripting.FileSystemObject")

通过转到Microsoft的文档页面,我可以发现“Scripting.FileSystemObject”是不用谷歌搜索就可以使用的正确名称。但不存在对象库引用的此类页面。那么,我如何才能找到“Microsoft Office 16.0对象库”的正确名称呢?

当您在Scripting.FileSystem上使用CreateObject时,您正在创建一个文件系统对象。定义文件系统对象的类位于脚本类型库中。换句话说,您不是在创建脚本对象。(我很确定你知道这一点,我正在准备下一部分。)

如果Office类型库中有任何对象,可以使用

CreateObject("Office.SomeObject")
但是里面没有任何对象,所以没有什么可创建的。如果在注册表中搜索在“工具-引用”(如Microsoft Office 16.0对象库)中看到的标签,则可以看到主互操作程序集名称。我一直认为该名称的第一部分是您在CreateObject中使用的,但现在我不确定。如果搜索Excel 16.0对象库,可以看到其互操作名称的第一部分是Excel。如果您想延迟绑定Excel,可以使用Excel.Application。但是,当我尝试查找scrrun.dll的互操作名称时,却找不到它。它必须在注册表中,但只搜索“脚本”将花费一生的时间

由于Office中没有任何对象,因此无需创建任何对象。但typlib中包含的是常量和枚举。要延迟绑定这些,只需声明变量或创建自己的枚举


简言之,您不需要创建Office对象,我也不知道字符串传递给CreateObject的权威源在哪里(但我仍然相信registry)。如果您找到了,请告诉我们。

为什么要延迟绑定此库?尝试消除使用早期excel版本的用户可能会弹出的错误。我在我编写的一个导入函数中使用它,该函数禁止执行代码。您从该库中具体使用了哪些与早期版本不兼容的内容?具体来说,我希望确保“MsoAutomationSecurity”能够正常工作。我从其他工作簿导入数据,这些工作簿在OnOpen过程中包含代码(我不想运行)。也就是说,我不完全确定我看到的错误是否来自于该引用。我想将它切换到后期绑定,主要是为了消除它作为问题源的问题。您看到的错误是什么?这可能是一个错误。谢谢你的洞察力,迪克!这又增加了一块拼图。您如何知道库只包含枚举和常量?你能用记事本++之类的东西打开它吗?在即时窗口中,我键入了
?Office.
以查看intellisense列表,但上面没有任何对象。我选中了对象浏览器(VBE中的F2),并将顶部下拉列表限制为仅显示Office库。其中有一些对象,如
COMAddins
。但我不能
创建对象(“Office.COMAddins”)
-它返回ActiveX无法创建对象。但我可以通过
Application.COMAddins
访问该对象,但我不能像
Dim x那样创建新的COMAddins
。因此,库可能必须以某种方式标记这些对象,以使其可创建。引用具有版本特定差异的Excel类型库似乎不包含在单独的.tlb或.olb文件中,而是作为资源嵌入到Excel.exe中@迪库斯莱卡