VBA是否声明未定义的类型变量



感谢您阅读本文。

我正在做一个个人项目。我写了一个脚本,它添加了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

最新更新