gpt4 book ai didi

excel - 将字典 ByRef 传递给 excel VBA 用户窗体模块中的私有(private)子会给出 ByRef 类型不匹配错误

转载 作者:行者123 更新时间:2023-12-04 22:13:50 32 4
gpt4 key购买 nike

我正在创建一个用户表单,它将不同的信息集收集到不同的字典中进行处理。
字典在用户窗体模块级别声明,并在激活用户窗体时在另一个过程中初始化。
为了简化我的代码,我有一个将项目插入适当字典的子例程。
我已将 Microsoft 脚本运行时添加到 VBA 引用
以下是代码示例
在用户表单模块声明处

Option Explicit
Option Compare Text
Dim Ref_Dict, Client_Dict, Service_Dict As Scripting.Dictionary
字典在同一模块的另一个过程中初始化。该模块在表单激活时被调用。激活模块的一部分是
Set Ref_Dict = New Scripting.Dictionary
Set Client_Dict = New Scripting.Dictionary
Set Service_Dict = New Scripting.Dictionary
这是将项目插入适当字典的过程
Private Sub Update_Dict(ByRef Dict As Scripting.Dictionary, ByVal Item As Variant, ByVal Key As Variant)
Dict(Key) = Item
End Sub
上述过程是从 Textbox 或 ComboBox _AfterUpdate 过程中调用的(视情况而定),例如
Private Sub ComboBox_1_AfterUpdate()
Dim Item, Key As Variant
Item = Me.ComboBox_1.Value
Key = "Name"
Update_Dict Ref_Dict, Item, Key
End Sub
在 ComboBox_1 中输入值会引发错误“ByRef 参数类型不匹配。
但是,如果我在常规模块中复制相同的场景,它会完美运行。
请问我做错了什么?

最佳答案

您是典型 VBA 陷阱的受害者。
正如罗里在评论中所写,当你写

Dim Ref_Dict, Client_Dict, Service_Dict As Scripting.Dictionary
你只声明 Service_Dict作为字典。其他两个变量声明为 Variant .作为 Variant可以包含任何内容(任何数据类型),您可以像在激活例程中那样为其分配一个字典对象。
然而,一个 Variant持有字典与字典不同,因此您会收到“类型不匹配”错误。
易于纠正,为所有变量提供数据类型:
Dim Ref_Dict As Scripting.Dictionary, Client_Dict As Scripting.Dictionary, Service_Dict As Scripting.Dictionary

关于excel - 将字典 ByRef 传递给 excel VBA 用户窗体模块中的私有(private)子会给出 ByRef 类型不匹配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71250784/

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