TLDR:
我正在编写和测试来自VBA的脚本,但它最终作为主桌面应用程序中的单个.bas
文件执行。
DLL引用从VBA丢失到bas
,迫使我将应用程序的成员类型定义为“对象”而不是.bas
文件中的本机类型。
我可以通过在bas文件中定义引用来避免将早期绑定转换为后期绑定代码吗?
更多信息:
我需要将vba脚本转换为软件可以执行的基本脚本。无论如何在基本脚本中引用tlb文件?我使用set app = CreateObject("...")
调用应用程序示例显示在示例中键入的所有内容都是“对象”,它不会从VBA中提供智能感知(当然)
是否可以将枚举作为文本值引用而不将它们转换回整数值?另外,有没有办法正确键入应用程序对象而不是在基本脚本中使用object
?
答案 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