感谢您阅读本文。
我正在做一个个人项目。我写了一个脚本,它添加了Scripting Runtime(使用Dictionary类型),然后将DictSummary等变量声明为Scripting.Dictionary。问题是,VBA不允许这样做,因为它甚至在运行代码之前就扫描代码以查找错误。当未添加Scripting Runtime时将DictSummary设为脚本。Dictrionary会产生"未定义用户定义的类型">错误。
If ReferenceIsAdded("Scripting") = False Then
If ProjectIsNA Then
Exit Function
Else
ThisWorkbook.VBProject.References.AddFromFile "C:WindowsSystem32scrrun.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/Dictionic才能工作。我尝试了On Error Resume Next,但没有帮助。
有没有办法避免这种情况,或者有没有办法选择性地声明一个变量?
您是否抗议Variant
,因为您可以将函数定义为返回Object
。在Locals窗口中可以看到在变量objDict
下方运行子TestAddDict
的类型为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