如何在activex dll / tlb引用后期绑定的基本脚本中使用枚举

时间:2017-12-15 15:25:14

标签: vba dll vbscript reference activex

TLDR: 我正在编写和测试来自VBA的脚本,但它最终作为主桌面应用程序中的单个.bas文件执行。

DLL引用从VBA丢失到bas,迫使我将应用程序的成员类型定义为“对象”而不是.bas文件中的本机类型。

我可以通过在bas文件中定义引用来避免将早期绑定转换为后期绑定代码吗?

更多信息: 我需要将vba脚本转换为软件可以执行的基本脚本。无论如何在基本脚本中引用tlb文件?我使用set app = CreateObject("...")调用应用程序示例显示在示例中键入的所有内容都是“对象”,它不会从VBA中提供智能感知(当然)

是否可以将枚举作为文本值引用而不将它们转换回整数值?另外,有没有办法正确键入应用程序对象而不是在基本脚本中使用object

1 个答案:

答案 0 :(得分:1)

  

我可以通过在bas文件中定义引用来避免将早期绑定转换为后期绑定代码吗?

不,你不能。 .bas文件不包含此类元数据。事实上,它所拥有的唯一元数据是模块的名称,存储为隐藏的VB_Name属性,VBE用它来填充模块的Name属性。

引用属于VBProject对象;如果你想让.bas文件独立存在并通过VBScript运行时在VBE之外执行,那么你必须将你的早期绑定代码转换为后期绑定。

这意味着你确实失去了智能感知,因为现在必须将该后期绑定库中定义的所有类型都声明为Object,并且需要将枚举值转换为它们的基础整数值。

或者,您可以为这些枚举定义同名常量,并保留名称:

Private Const SomeEnumValue As Long = 42

或者,[重新]自己定义枚举:

Private Enum SoneEnum
    SomeEnumValue = 42
    '...
End Enum