在 VBA 中使用 .NET HashTable 返回类型

2023-12-22

我在 VB.NET 中创建了一个 .NET 库,并且有一个函数返回一个对象HashTable.

我一直在寻找如何在 Excel VBA 中访问 HashTable 对象中的元素,但找不到解决方案。我是 VBA 新手,请原谅我。我已经寻找过,但找不到出路。

例如,在发生这样的事情之后,我不知道如何访问数据。

   Dim hashData As Object
   Set hashData = obj.getHashData

请帮忙


Dim hashData As Object
Set hashData = obj.getHashData

If getHashData正在返回一个HashTable, then hashData是一个后期绑定HashTable,你可以调用它的members https://learn.microsoft.com/en-us/dotnet/api/system.collections.hashtable?view=netframework-4.8#properties,包括其Item财产 https://learn.microsoft.com/en-us/dotnet/api/system.collections.hashtable.item?view=netframework-4.8#System_Collections_Hashtable_Item_System_Object_:

Dim value As Variant
value = hashData.Item("key")

您没有对后期绑定成员调用进行编译时验证Object,所以你需要特别小心拼写错误,因为Option Explicit当涉及后期绑定时,无法拯救您。请参阅HashTable上面链接的文档了解您可以调用哪些成员。

添加参考mscorlib.tlb(你会在下面找到它C:\Windows\Microsoft.NET\Framework\v4.0.30319,或参考等效的\Framework64如果您的 Excel 是 64 位 - 库的位数需要与主机应用程序的位数相匹配)通常会允许早期绑定,但是虽然此库是 COM 可见的,但它旨在从托管 (.net) 代码中使用,因此您可以从接口访问这些对象 - 具体类型不会直接公开任何成员:

知道Hashtable实施IDictionary接口,我们可以使用早期绑定并获得编译时验证和智能感知如果我们声明hashData As IDictionary:

Dim hashData As mscorlib.IDictionary
Set hashData = New mscorlib.Hashtable
hashData.Add "foo", 42
Debug.Print hashData.Item("foo") 'prints 42

请注意,Item财产暴露为默认会员:

这意味着您可以拥有Item隐式成员调用,正如您对任何标准 VBA 集合对象所做的那样:

Dim hashData As mscorlib.IDictionary
Set hashData = New mscorlib.Hashtable
hashData.Add "foo", 42
Debug.Print hashData("foo") 'prints 42

早期绑定的代码更容易编写,尤其是当您不熟悉所涉及的类型时。但是,如果项目引用 64 位框架并且您的宏需要在 32 位 Excel 上运行,则您需要坚持使用后期绑定以避免绑定问题。

另请注意,迭代Hashtable对象有一个For Each循环不起作用,因为枚举器在 VBA 中的工作方式与在 .NET 中的工作方式不同;这Keys and Values集合是实现ICollection接口,因此迭代它们也将是不平凡的:For Each循环不起作用,虽然你可以设置一个For i = 0 To hashData.Keys.Count - 1,您无法获取索引处的项目i从一个ICollection.

但我们知道ICollection继承IEnumerable, and IEnumerable does与...一起工作For Each, 所以我们可以cast the Keys收集到IEnumerable,并像这样迭代所有键和值:

Dim hashData As mscorlib.IDictionary
Set hashData = obj.getHashData

Dim hashKeys As mscorlib.IEnumerable
Set hashKeys = hashData.Keys

Dim k As Variant
For Each k In hashKeys
    Debug.Print k, hashData(k) 'outputs the key and its associated value
Next

问题是你不能cast to IEnumerable使用后期绑定代码或不引用mscorlib.tlb,并且后期绑定不知何故不会看到GetEnumerator成员,所以这会引发错误 438:

Dim hashKeys As Object
Set hashKeys = hashData.Keys

Dim k As Variant
For Each k In hashKeys ' error 438, hashKeys isn't exposing the enumerator
    Debug.Print k, hashData(k) 
Next

结论:如果您需要 VBA 代码在 32 位和 64 位主机上运行,​​您将不得不跳过重重困难才能使后期绑定代码正常工作。如果您使用的是 64 位主机,我建议您尽早绑定 64 位框架,并为 32 位主机分发引用 32 位框架的宏的单独副本。分发有点痛苦,但比让后期绑定的代码工作更痛苦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 VBA 中使用 .NET HashTable 返回类型 的相关文章

  • 如何让VLOOKUP在VBA中选择到最低行?

    希望自动在单元格中插入 VLOOKUP 公式 录制宏时 我指示它使用相同的公式填充下面的列 效果很好 但是 当 VLOOKUP 搜索的表发生变化 更多或更少的行 时 就会出现问题 在记录时 VLOOKUP 下降到表中的最后一行 273 但是
  • VBA 中的多线程

    这里有人知道如何让VBA运行多线程吗 我正在使用 Excel 无法用 VBA 本地完成 VBA 构建在单线程单元中 获得多个线程的唯一方法是使用 VBA 之外的其他具有 COM 接口的东西构建 DLL 并从 VBA 调用它 信息 OLE 线
  • Office excel将CORS请求作为跨域请求

    我正在尝试从我的 Excel 插件发出跨域请求 正如这里所建议的 http dev office com docs add ins develop addressing same origin policy limitations http
  • 导出到excel时如何显示前导零?

    我正在通过更改内容类型来创建 Excel 报告 Response ContentType application vnd ms excel 我有包含前导零的值 问题是导出到 Excel 时缺少前导零 e g 000123 gt 123 我知
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • 将包含宏的工作簿复制到不带宏的工作簿

    我能够复制工作簿 复制到所需位置 其中在后台包含宏 该副本还包含相同的宏 我的问题是我不希望这个重复的工作簿包含宏 谁能告诉怎么做吗 先感谢您 将您的工作簿保存为无宏 即简单地保存为 Excel 工作簿 对于我的 Excel 2007 这是
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 如何在Power Query中对N列求和

    我的数据每月都会更新 因此我尝试创建一个强大的查询表 该表将显示我创建的枢转 N 列的总和 但我似乎不知道如何在强大的查询中执行此操作 我目前有这个代码 旋转后 创建要求和的列的列表 添加索引列以限制每行 添加一列 该列对该行的列进行求和
  • 比较数组中的文件、从文本文件中删除行、函数、日志记录

    所以我创建了这两个数组 Approved Shares 和 Current Shares Reads Approvedshare txt and makes the txt file into an array public objFSO
  • 使用 FindElementbyXpath() 获取 Selenium Basic 中可填充框的行和列名称

    我正在使用 Selenium Basic 将电子表格中的文本填充到网站中 网站的html代码是这样的 div table cellspacing 0 border 1 style width 99 tr th style font weig
  • 在 PYTHON 中读取 EXCEL 时,“utf-16-le”编解码器无法解码字节

    我正在尝试读取不同语言 阿拉伯语 希腊语 意大利语 希伯来语等 的各种数量的 xls 文件 当我尝试调用 open workbook 函数时 出现如下所示的错误 不知道如何将格式设置为任何语言 Code book xlrd open wor
  • 在javascript中访问隐藏字段值

    我的表单中有一个隐藏字段 我正在服务器上设置隐藏字段的值并尝试从 javascript 访问该值 我收到错误 无法获取属性 值 的值 对象为 null 或未定义 如果我查看源代码 则会设置隐藏字段值 并且隐藏字段的 ID 与我正在调用的 I
  • 使用 ADODB 连接从关闭的工作簿中检索数据。某些数据被跳过?

    我目前正在编写一些代码 可以通过 ADODB 连接访问单独的工作簿 由于速度的原因 我选择了这种方法而不是其他方法 下面是我的代码 Sub GetWorksheetData strSourceFile As String strSQL As
  • 如何在 Excel 中对“高”字符进行 HTML 编码或音译?

    在 Excel 中 如何将包含重音字符 大引号等的单元格内容转换为相同字符的 HTML 或音译纯文本版本 我们有一个 XLS 文档 其中包含一些 高 字符 数据已通过数据库连接提取 并且 Excel 似乎正确处理不同代码页中的各个单元格 或
  • 如何在vb.net中对datagridview的3列进行排序

    下面我想对 ProductCode ColorCode 和 Size 列进行排序 请指导 对 大小 列中的信息进行排序 Size Number sequence XS 1 S 2 M 3 L 4 XL 5 XXL 6 2L 7 3L 8 4
  • 如何使用vba复制Excel工作表中的动态范围

    我试图使宏中的范围是动态的 而不指定最后一行x Sheets SheetName Range A2 K1000 Copy在 1000 行中 我想将其更改为动态 因为有时我的数量会更少或更多 尝试这个 Sub Test Dim lRow as
  • 如何将 .xlsx 文件上传到 jenkins 作业

    如何将 xlsx 文件作为构建参数上传到 jenkins 作业 我尝试使用文件参数 但我发现该文件正在丢失其扩展名或原始格式 有什么方法可以从 jenkins UI 将 excel 文件上传到 jenkins 作业吗 In the file
  • UDP SocketException - 通常只允许每个套接字地址使用一次

    尽管这里有很多非常相似的问题 但提供的答案都没有帮助我 这让我很难过 我有一个非常大的管理系统 我的任务是为其编写一些 UDP 数据包发送 接收 我已经编写了一个原型 一切都很好 所以我开始将我的代码合并到所述系统中 然而 我现在弹出了一个
  • 使用 XMLHTTP 进行抓取会在特定类名处引发错误

    我正在尝试使用此代码抓取网站以提取姓名和联系人 Sub Test Dim htmlDoc As Object Dim htmlDoc2 As Object Dim elem As Variant Dim tag As Variant Dim

随机推荐

  • 在 Android 中自定义 Google SignInButton

    我想在 Android 中自定义 Google 登录按钮 目前我使用以下代码有一个非常基本的默认布局
  • 使用 SQL LAG 函数计算股票收益

    我有一张股票价格表 我正在尝试计算每日回报 Ticker Date price ABC 01 01 13 100 00 ABC 01 02 13 101 50 ABC 01 03 13 99 80 ABC 01 04 13 95 50 AB
  • struts2 中的日期验证

    我正在创建一个表单 用户将在其中注册 struts2 应用程序 用户需要输入特定格式的日期 由于我不打算使用 datepicker ajax 标签 因此我使用带有日期标签的文本字段 格式如下
  • 如何在 OS X 中获取当前前台应用程序的名称或 PID?

    我需要在 OS X 中获取当前前台应用程序的名称或 PID 如何使用终端获取它 您可以使用 lsappinfo 命令从终端找到此信息 手册页详细介绍了该工具可以返回的大量信息 为了获取最前面的应用程序 您可以使用 front 参数调用 ls
  • endl 操纵器在哪里定义

    我们知道endl是操纵器 它在内部放置 n 缓冲然后刷新缓冲区 哪里endl定义 什么是endl 是宏 函数 变量 类还是对象 我该如何定义自己的endl操纵者 cout lt lt hello lt lt endl what is end
  • 如何处理 AWS Glue 中映射函数中的错误?

    我正在使用mapDynamicFrame 的方法 或者等效地 Map apply方法 我注意到我传递给这些函数的函数中的任何错误都会被默默地忽略 并导致返回的 DynamicFrame 为空 假设我有一个这样的作业脚本 import sys
  • 禁用命令按钮时,PrimeFaces 6.2 命令按钮标题不起作用

    环境 JSF 2 2 14 PrimeFaces 6 2 我的命令按钮设置如下 当按钮被禁用时 标题将在 PF6 1 中显示 悬停时 但不会在 PF6 2 中显示
  • 模块在本地声明组件,但未导出

    我创建了一个共享模块并声明并导出了其他模块中我需要的组件 import NgModule from angular core import CommonModule from angular common import DateslideC
  • 硒点击坐标没有点击预期的位置

    我需要屏幕抓取使用 ActiveX 控件进行导航的网页 这不是用于用户界面测试目的 而是用于从遗留应用程序下载数据 我遇到的问题是顶部导航是带有 javascript 的完整 ActiveX 不可能通过任何方式获取元素 所以我试图在坐标上单
  • 使用 iOS 6.0 SDK 并针对 iOS 5 Target 进行构建会导致 UIScrollView setMinimumZoomScale 在 iOS 5 模拟器上运行时失败

    i upgraded to Xcode 4 5 and have started using the iOS SDK 6 0 我有一个使用 Xcode 4 4 和 iOS SDK 5 1 开发的通用应用程序 它已经在所有经过测试的设备和模拟
  • 获取 EC2 实例 Java API 的状态

    我正在尝试在 AWS 上自动化一些东西 并且我正在使用 Java API 来执行此操作 我能够启动我想要的实例数量 但我无法找到正确的类或方法来获取实例的当前状态 如运行 停止等 我试过这个 DescribeInstanceStatusRe
  • Java 中的 KDTree 实现

    我正在寻找 Java 中的 KDTree 实现 我已经进行了谷歌搜索 结果似乎很随意 实际上有很多结果 但它们大多只是一次性的小实现 我宁愿找到具有更多 生产价值 的东西 类似于 apache 集合或适用于 NET 的优秀 C5 集合库 我
  • PHP:将 preg_replace 与 htmlentities 一起使用

    我正在写一个RSS to JSON parser作为其中的一部分 我需要使用htmlentities 在描述标签内找到的任何标签上 目前 我正在尝试使用preg replace 但我有点挣扎 我当前的 非工作 代码如下所示 pattern
  • IE10 中的 LinkBut​​tons 不执行回发

    我正在尝试添加一个简单的LinkButton到 ASP NET 4 页面 但它没有调用postback在 IE10 中 代码如下所示 HTML
  • mysql返回更新结果

    我想从 mysql 数据库中选择一堆行并更新这些行的查看属性 这是一种 我已阅读这些 标志 最初我做了这样的事情 update select a b c from mytable where viewed 0 set viewed 1 这可
  • PostgreSQL 与 Postgres Plus

    有谁知道两者之间有什么实质性差异常规 PostgreSQL http www postgresql org and Postgres Plus http www enterprisedb com products postgres plus
  • 如何在 Django/Python 中自动填充 PDF 表单? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有 PDF 表单 我想使用 Django Web 应用程序中的数据自动填充这些表单 然后提供给用户下载
  • config 文件夹中的 main.php 和 main-local.php 之间的区别?

    谁能解释一下两者之间的区别main php and main local php在配置文件夹中 为什么一个人拥有 local 而另一个则没有 你可以阅读配置和环境 https github com yiisoft yii2 app adva
  • Aspectj 覆盖方法的参数

    我正在开发一个方面 用于检查 setter 方法的参数并用 null 值覆盖空字符串 这是我到目前为止的状态 Before execution de foo entity set args java lang String public v
  • 在 VBA 中使用 .NET HashTable 返回类型

    我在 VB NET 中创建了一个 NET 库 并且有一个函数返回一个对象HashTable 我一直在寻找如何在 Excel VBA 中访问 HashTable 对象中的元素 但找不到解决方案 我是 VBA 新手 请原谅我 我已经寻找过 但找