感谢阅读。
我正在做一个个人项目。我编写了一个脚本,该脚本添加了脚本运行时(以使用Dictionary类型),然后将诸如DictSummary之类的变量声明为Scripting.Dictionary。问题是,VBA不允许这样做,因为它甚至在运行之前都会扫描代码以查找错误。当未添加脚本运行时时, 将DictDictSummary用作脚本。字典会产生“未定义用户定义类型” 错误。
If ReferenceIsAdded("Scripting") = False Then
If ProjectIsNA Then
Exit Function
Else
ThisWorkbook.VBProject.References.AddFromFile "C:\Windows\System32\scrrun.dll"
End If
Dim DictSummary As Scripting.Dictionary
我尝试添加一个函数来声明,分配和返回Dictionary类型的变量,以避免出现此错误。
Public Function AddADict() As Variant
Dim myDict As Scripting.Dictionary: Set myDict = New Scripting.Dictionary
Set AddADict = myDict
End Function
然后我得到这样的变量
Set DictSummary = AddAdict()
它确实避免了该错误,但是返回的变量并非如此,DictSummary的类型为Variant / Object / Dictionary,而应该使用Dictionary / Dictionary才能使该变量起作用。我尝试了On Error Resume Next,但没有帮助。
是否有避免这种情况的方法,还是有选择地声明变量的方法?
答案 0 :(得分:1)
您是否对Variant
提出抗议,因为您可以定义函数以返回Object
。在本地变量窗口中可以看到在变量TestAddDict
下运行子objDict
,类型为Object/Dictionary
Option Explicit
Function AddADict() As Object
Set AddADict = VBA.CreateObject("Scripting.Dictionary")
End Function
Sub TestAddADict()
Dim objDict As Object
Set objDict = AddADict
End Sub