【问题标题】:excel vba import system.collections.hashmap into a moduleexcel vba 将 system.collections.hashmap 导入模块
【发布时间】:2013-10-25 19:44:00
【问题描述】:

从我的 MS Excel 2010 安装内部,我打开了 Visual Basic 编辑器。 (选项卡开发工具 -> Visual Basic)

Visual Basic 编辑器中,我右键单击项目窗口并创建了一个模块。 (插入 -> 模块)

然后我在代码窗口中输入以下代码:

Sub myFunction()
    'do some stuff to my table cells, not important
End Sub


在函数体内编码了很多东西之后,我认为我需要一个 Hashmap,它需要在给定的函数体内访问。不幸的是,我无法导入这样做所需的类:

Imports System.Collections
Sub myFunction()
    'do some stuff to my table cells, not important
End Sub

按 F5 启动模块时出现错误消息。它说(我从德语翻译成英语):“编译时出错:在程序之外是非法的”

如何在 VBA 中导入一些东西,当代码结构如上时?我通常是一个 java 或 python 人。如果函数仍在执行,您还可以重新构造代码。

【问题讨论】:

    标签: function excel import module vba


    【解决方案1】:

    在这种情况下,您可以使用

    收藏

    字典


    Collection内置到 VBA 中,因此您无需添加外部引用即可使用它。你可以简单地声明它

    Dim c as Collection
    Set c = new Collection
    

    Collection 公开了 4 种方法:add, count, item, remove 所以它可能对你来说还不够。

    Customizing, expanding Collection class


    如果您想使用类似 HashTable/HashMap 的东西,请在 VBE 窗口中单击 ToolsReferences 添加对 Microsoft Scripting Runtime 的引用

    那么您可以将早期绑定和智能感知与Dictionary 类一起使用

    Dim d as Dictionary
    Set d = new Dictionary
    

    或者使用后期绑定

    Dim d as Object
    set d = CreateObject("Scripting.Dictionary")
    

    我会选择早期绑定(第一个示例 - 添加对 VBA 项目的引用),以便您可以使用 VBA Intellisense。

    您可以使用对象浏览器查看 DictionaryCollection 类 - 只需在 VBE 窗口中按 F2 并输入 DictionaryCollection

    关于Dictionary class的有用信息

    【讨论】:

    • 谢谢!两个类中似乎都没有“包含”方法,但在 Dictionary 类中有类似的东西:“存在”方法。我可以以与“包含”方法相同的方式使用它吗?
    • @kiltek check this out - 展示如何实现一种方法来检查密钥是否存在
    • exists 函数确实适合我的需要。因此,当通过 excel vba 编辑器导入某些内容时,我必须执行以下操作“在 vba 编辑器 -> 工具 -> 参考 -> 添加所需的库”。这与 java 并没有什么不同,但我不需要额外的导入。
    猜你喜欢
    • 2018-08-29
    • 2016-11-08
    • 1970-01-01
    • 2018-08-08
    • 2013-03-27
    • 2021-07-23
    • 2018-02-26
    • 2019-06-14
    • 2014-09-19
    相关资源
    最近更新 更多