【发布时间】:2020-07-13 18:08:25
【问题描述】:
我正在为 Excel 使用 VBA。据我了解,全局变量需要在任何 subs 之外声明。这是所有潜艇都可以访问它们的唯一方式。
同时,我想进行后期绑定以引用“Microsoft Scripting Runtime”库(以使用字典对象类型),这样最终用户就不必自己动手了。
我的代码如下:
On Error Resume Next
strGUID = "{420B2830-E718-11CF-893D-00A0C9054228}"
ThisWorkbook.VBProject.References.AddFromGuid GUID:=strGUID, Major:=1, Minor:=0
Dim Dic1 As Object
Set Dic1 = CreateObject("Scripting.Dictionary")
Dim Dic2 As Object
Set Dic2 = CreateObject("Scripting.Dictionary")
如果我想用后期绑定声明全局字典对象怎么办?看起来 VBA 不允许我将任何代码放在 subs 之外(除了声明)。
如何在不需要最终用户自己配置库引用的情况下声明全局字典对象?我应该执行以下操作吗?
Dim Dic1 As Object
Dim Dic2 As Object
Sub Prog1()
On Error Resume Next
strGUID = "{420B2830-E718-11CF-893D-00A0C9054228}"
ThisWorkbook.VBProject.References.AddFromGuid GUID:=strGUID, Major:=1, Minor:=0
Set Dic1 = CreateObject("Scripting.Dictionary")
Set Dic2 = CreateObject("Scripting.Dictionary")
End Sub
【问题讨论】:
-
只能声明对象,不能设置。所以只是
Dim Dic1 As Object在子之外。也许在 Workbook_Open() 子/事件中你可以做 Set? -
旁注:在扫描您的代码时,我看到
On Error Resume Next没有On Error GoTo任何地方都可以将其关闭。这是非常危险的——你永远不知道你的代码什么时候抛出错误,也不知道是什么原因造成的。 -
FWIW 你很少需要一个全局变量。你知道如何将参数传递给过程/函数吗?
-
此外,脚本运行时库是每个 Windows 机器上的标准问题,本世纪还没有看到更新,在可预见的未来也不太可能看到更新 - 除非您的代码需要在其上运行Mac,无需后期绑定该库。项目引用与 VBA 项目一起保存在宿主文档中,用户无需自行添加。
-
是的,你(开发者)需要添加它。 一次。一旦它在那里,它就在那里。