VBA声明未定义的类型变量吗?

时间:2019-01-27 13:16:36

标签: vba

感谢阅读。

我正在做一个个人项目。我编写了一个脚本,该脚本添加了脚本运行时(以使用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,但没有帮助。

是否有避免这种情况的方法,还是有选择地声明变量的方法?

1 个答案:

答案 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