如何在Excel VBA中将字典设置为字典值?

如何在Excel VBA中将字典设置为字典值?,excel,vba,dictionary,Excel,Vba,Dictionary,我想将字典设置为字典值? 但它会抛出一个错误,比如 '参数数目错误或属性分配无效' 如何解决这个问题 sub test() Dim Dict As Scripting.Dictionary Set Dict = New Scripting.Dictionary Dim rows As Scripting.Dictionary Set rows = New Scripting.Dictionary dict("name") = "Sarah" dict("surname") = "Jones"

我想将字典设置为字典值? 但它会抛出一个错误,比如

'参数数目错误或属性分配无效'

如何解决这个问题

sub test()
Dim Dict As Scripting.Dictionary
Set Dict = New Scripting.Dictionary
Dim rows As Scripting.Dictionary
Set rows = New Scripting.Dictionary 

dict("name") = "Sarah"
dict("surname") = "Jones"

rows(dict("name")) = dict

end sub
Dictionary是一种对象类型,具有默认成员

此赋值的RHS实际上是对dict.Item的调用,但调用时没有任何参数。。。但关键参数是必需的,因此存在错误

Set关键字消除了默认成员调用与yes之间的歧义,我的意思是对象引用本身


Dictionary是一种对象类型,在分配对象类型时,您似乎缺少required Set关键字,请尝试Set rowsdictname=dict,尽管在将完整dict分配给属于dict的名称键时,这看起来有点可疑。@DavidZemens-您可以像这样向字典添加键/项,而无需设置,我猜是因为您没有实际分配对象。@DavidZemens-也就是说,如果给出了答案,您认为您已经锁定了它。所以其他分配不需要设置,因为它们不是对象?@SJR VBA中有两种类型的分配:Let和Set-分别用于值和引用分配。Let关键字已过时,可以省略,但如果RHS是您试图让其通过默认成员调用强制对象的对象,则可以省略Set关键字。如果没有默认成员,则会出现错误438。如果有一个,但它是参数化的,则会得到OP得到的错误。VB.NET对象删除了默认成员的概念,因此Set关键字也消失了。@SJR-Huh,显然。我目瞪口呆,但很高兴看到,这一段中的注意事项也绝对适用于VBA代码。您不能定义至少不带一个参数的默认属性。-这就是Set被移除的方式;他们把这种模棱两可的情况看作是编译器的错误。
rows(dict("name")) = dict
Set rows(dict("name")) = dict