【发布时间】:2017-12-15 15:25:14
【问题描述】:
TLDR:
我正在使用 VBA 编写和测试一个脚本,但它最终会作为来自主桌面应用程序的单个 .bas 文件执行。
DLL 引用从 VBA 丢失到 bas,这迫使我将应用程序的成员类型定义为“对象”,而不是它们在 .bas 文件中的本机类型。
是否可以通过在 bas 文件中定义引用来避免将早期绑定代码转换为后期绑定代码?
更多信息:
我需要将 vba 脚本转换为软件可以执行的基本脚本。基本脚本中是否有引用 tlb 文件的内容?我使用set app = CreateObject("...") 调用应用程序这些示例显示在他们的示例中键入为“对象”的所有内容都没有从 VBA 提供智能感知(当然)
是否可以引用枚举作为它们的文本值而不将它们转换回它们的整数值?另外,有没有办法正确键入应用程序对象,而不是在基本脚本中使用object?
【问题讨论】:
-
枚举不是文本值,它们是带有名称的
Long整数,名称是标识符,而不是String。你想做什么?你没有得到智能感知,因为你声明了app As Object,这意味着所有成员调用都在运行时得到解决(即它们是后期绑定调用)。如果您正在引用该库,则无需编写后期绑定代码。Set app = New ThatLibrary.WhateverThatIs,假设Dim app As ThatLibrary.WhateverThatIs,您将获得智能感知。 -
工具 > 参考... > 浏览到 .tlb 文件,完成。
-
@Mat'sMug 我已经澄清了我的问题。我正在使用 VBA 编写参考并获得智能感知,但需要将 VBA 移动到 BAS 脚本并且 VBA 参考消失了。
-
所以你问是否有一个工具可以看到你正在使用未引用的库中定义的类型,并自动将你的早期绑定代码转换为后期绑定等效?不幸的是,VBE 中没有这样的东西 - 虽然有一个 feature request in my Rubberduck project 用于这样的功能,但它还没有实现。不过,我很乐意接受实现它的拉取请求。
-
.bas 文件没有引用,它只是一个纯文本文件,几乎没有任何元数据。引用属于
VBProject对象。如果您希望 .bas 文件在 VBE 之外可执行,则无法避免转换。
标签: vba dll vbscript reference activex