gpt4 book ai didi

vba - 将变量数组传递给方法会产生 "Type Mismatch"错误

转载 作者:行者123 更新时间:2023-12-04 14:27:30 26 4
gpt4 key购买 nike

我有以下两种方法:

Sub Start()
Dim x As Dictionary
Set x = New Dictionary
Call x.Add("first", 1)
MsgBox TypeName(x.Items) 'Displays "Variant()"
Call Test(x.Items)
End Sub

Sub Test(withArray() As Variant)

End Sub

我的项目引用“Microsoft Scripting Runtime”来提供 Dictionary上面使用的类。尽管 x.Items返回 Variant() (如 MsgBox TypeName(x.Items) 所示,我在 Call Test(x.Items) 上收到以下编译错误:

Type mismatch: array or user-defined type expected



怎么了?

注意:如果我更改 Test方法:
Sub Test(withArray)
MsgBox TypeName(withArray)
End Sub

它成功并显示 Variant() .为什么我不能将参数明确声明为 Variant()类型?

最佳答案

ItemsVariant未声明类型,这意味着就编译器而言,它在运行时可以是任何东西——不一定是数组。当然,我们知道它将是一个数组,因为它是字典的一部分,但它没有声明类型(对象浏览器显示它是一个没有返回类型的函数)所以它默认为 Variant。由于编译器不能保证它在运行时是一个数组,它不允许您在 Test() 过程中尝试声明。
在运行时,它变成了一个数组,所以 TypeName()显示为 Variant()
有趣的是,VBA 确实允许分配给一个变体数组,所以这是有效的:

Sub Start()
Dim x As Dictionary
Dim y() As Variant
Set x = New Dictionary
Call x.Add("first", 1)
MsgBox TypeName(x.Items) 'Displays "Variant()"
y = x.Items ' this is fine
Call Test(y) 'this works
End Sub

Sub Test(withArray() As Variant)

End Sub

关于vba - 将变量数组传递给方法会产生 "Type Mismatch"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com