将 vb.net 字典转换为 vba 字典
Posted
技术标签:
【中文标题】将 vb.net 字典转换为 vba 字典【英文标题】:Converting a vb.net dictionary to a vba dictionary 【发布时间】:2015-07-28 01:13:38 【问题描述】:我很高兴发现我可以将我在 vb.net 中设置的结构直接调用到 excel vba 中 - 使用 COM 可见并使用 regasm.exe 进行注册。
我正在努力对在 vb.net 中创建的字典做同样的事情。
我发现这个link 表明vb.net 中的字典与vba 中的runtime.scripting 字典不同。
不过,我对 cmets 中建议的链接不太满意。
这是vb.net代码:
Public Function ReturnDict() As Dictionary(Of String, Integer)
Dim dict As New Dictionary(Of String, Integer)
dict.Add("a", 10)
dict.Add("b", 11)
Return dict
End Function
这是vba代码:
Function MyReturnDict()
Dim classLib As New MyVBClass.Class1
Set MyDict = classLib.ReturnDict()
\\do stuff with dictionary
MyReturnDict = Result
End Function
任何帮助/建议将不胜感激!
【问题讨论】:
parser to convert .net dictionary or list to VBA's equivalent dictionary or collection 的可能重复项。 虽然链接的问题是指升c,但我本质上同意这两个问题非常相似,对此我深表歉意。但是,是否有可能阐明如何将该答案应用于 vb.net? COM 和 VBA 都不支持泛型类型。修复起来很简单,您只需将返回类型更改为 System.Collections.IDictionary。如果类型安全很重要,那么您必须创建自己的。 非常感谢@HansPassant - 它向 VBA 返回了一个类似字典的对象。为了在 scripting.runtime VBA 字典中转换它 - 是否需要遍历所有键和值?如果是这样,有没有一种有效的方法来做到这一点? 一种有效的方法是不复制。添加对 c:\windows\syswow64\scrrun.dll 的引用,在你的代码中创建一个 Scripting.Dictionary 对象。 【参考方案1】:Hans Passant在上面cmets中的解决方案完美解决了这个问题:
在 VB.net 中,使用:
Public Function ReturnDict() As System.Collections.IDictionary
或参考 scrrun.dll 和:
Public Function ReturnDict() As Scripting.Dictionary
Dim dict As New Scripting.Dictionary
后一种解决方案提供了一个可以随意使用的 VBA 字典。
【讨论】:
以上是关于将 vb.net 字典转换为 vba 字典的主要内容,如果未能解决你的问题,请参考以下文章
Swift4.2~数组和字典(Array, Dictionary)基本类型转换