将 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 字典不同。

不过,我对 cme​​ts 中建议的链接不太满意。

这是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)基本类型转换

如何将afnetworking json字典转换为字符串,然后在IOS中将字符串转换为字典?

将列表列表转换为Python中的字典字典

将字典转换为字符串,然后再次返回字典

将“对”列表转换为字典字典?

如何将字符串字典转换为字典并拆分为单独的列