VBA中打印集合内字典名称时出现450错误的求助
解决VBA遍历字典集合时的450错误及获取字典名称问题
嘿,我来帮你搞定这个问题!首先咱们拆解一下你遇到的核心问题:
1. 为什么会出现450参数错误?
你直接执行Debug.Print AnimalType的时候,AnimalType是一个Scripting.Dictionary对象,VBA的Debug.Print无法直接输出整个字典对象——它不知道该如何解析这个复杂对象的输出格式,所以就抛出了参数无效的错误。
另外还要提个小细节:你在集合里添加了Swans,但之前的代码里没有定义和初始化这个字典对象,这后续也可能导致运行错误,记得先补上Set Swans = CreateObject("scripting.dictionary")哦。
2. 怎么获取你想要的字典名称(Cows/Dogs/Goats)?
这里要明确一个关键点:Scripting.Dictionary对象本身不会存储你给它定义的变量名(比如Cows、Dogs)。所以直接遍历集合里的字典对象,是拿不到这些名称的。我们需要手动把名称和字典关联起来,这里有两个常用方案:
方案一:用数组将名称和字典绑定后存入集合
修改你添加集合的代码,每次存入一个包含「名称+字典」的数组:
Dim TotalAnimals As New Collection ' 记得先初始化Swans字典 Set Swans = CreateObject("scripting.dictionary") TotalAnimals.Add Array("Cows", Cows) TotalAnimals.Add Array("Dogs", Dogs) TotalAnimals.Add Array("Swans", Swans)
然后遍历的时候,取出数组的第一个元素就是名称:
Dim AnimalItem As Variant For Each AnimalItem In TotalAnimals ' 打印字典名称 Debug.Print AnimalItem(0) ' 如果需要操作字典本身,用AnimalItem(1),比如获取第一个键值: ' If AnimalItem(1).Count > 0 Then Debug.Print AnimalItem(1).Items(0) Next AnimalItem
方案二:用Dictionary嵌套存储(更直观)
把原来的Collection换成一个Dictionary,以字典名称为键,对应的字典对象为值:
' 定义存储字典的容器 Dim TotalAnimals As Object Set TotalAnimals = CreateObject("scripting.dictionary") ' 初始化Swans字典 Set Swans = CreateObject("scripting.dictionary") ' 添加名称和对应字典 TotalAnimals.Add "Cows", Cows TotalAnimals.Add "Dogs", Dogs TotalAnimals.Add "Swans", Swans
遍历的时候直接遍历这个外层字典的键,就能拿到你想要的名称:
Dim AnimalName As Variant For Each AnimalName In TotalAnimals.Keys Debug.Print AnimalName ' 要访问对应的字典,直接用TotalAnimals(AnimalName) Next AnimalName
内容的提问来源于stack exchange,提问作者Cla Rosie
相关产品推荐
相关产品推荐

