简述:

在VBA中,字典通常使用Scripting.Dictionary对象,通过CreateObject("Scripting.Dictionary")创建。它需要引用Microsoft Scripting Runtime库(scrrun.dll)。VBA字典的方法包括Exists、Add、Remove等,键值对可以是各种类型但有限制。

在VB.NET中,字典使用泛型集合Dictionary(Of TKey, TValue),属于System.Collections.Generic命名空间。VB.NET字典具有更丰富的功能,如ContainsKey、ContainsValue等方法。它支持强类型和泛型,性能更好,并且可以直接操作数组等数据结构。

两者的主要区别包括:

1.类型系统(VB.NET强类型vs VBA弱类型)、

2.创建方式、

3.性能表现、

4.功能方法以及数据操作上的差异。

例如:在VBA中检查键是否存在用Exists,而在VB.NET中用ContainsKey。

          在VB.NET中可以直接操作数组元素,而VBA需要额外步骤。

⚙️ 1. 类型系统与泛型支

VBA 字典:  弱类型,键和值默认是  Variant  类型,需运行时类型检查。  示例:存储任意类型数据,但易因类型错误崩溃。

Dim dict As ObjectSet dict = CreateObject("Scripting.Dictionary")dict.Add "Name", "John"      ' 字符串dict.Add "Age", 30            ' 数字dict.Add "BirthDate", #1990-01-01# ' 日期

VB.NET 字:  强类型,支持泛型  Dictiona  ry(Of TKey, TValue) ,编译时类型检查更安全高效。  示例:明确指定键为  String ,值为  Integer 。

Dim dict As New Dictionary(Of String, Integer)()dict.Add("Age", 30)           ' 正确' dict.Add("Name", "John")    ' 编译报错:值类型不匹配

🛠️ 2. 创建与初始化

VBA:依赖 COM 组件  Scriptin  g.Dictionary ,需后期绑定或引用  scrrun.d  ll : 

' 后期绑定(无智能提示)Set dict = CreateObject("Scripting.Dictionary")

VB.NET:原生集成在 .NET 框架中,无需外部依赖:

' 直接实例化Dim dict As New Dictionary(Of String, Object)

  • ⚡ 3. 性能与底层实现
  • VBA:基于 COM 的哈希表,大量数据操作时效率较低(尤其频繁跨进程调用)。
  • VB.NET:使用 .NET 优化的哈希算法,支持多线程,性能更高(尤其大数据量时)。


示例:检查值是否存在

' VB.NET:检查值If dict.ContainsValue(30) Then    Console.WriteLine("值存在")End If

🧩 5. 数据操作差异(数组为例)

  • VBA:数组需完整取出→修改→重新赋值:
dict.Add "Scores", Array(80, 90)arr = dict("Scores")arr(1) = 95dict("Scores") = arr  ' 必须重新赋值

VB.NET:直接修改数组(因数组是引用类型):

dict.Add("Scores", New Integer() {80, 90})dict("Scores")(1) = 95  ' 直接修改

🌐 6. 适用环境与扩展性

  • VBA:  仅限 Office 环境(Excel、Word 等),无法脱离宿主运行。
  • VB.NET:  独立应用或跨平台(通过 .NET Core),支持异步、LINQ 等高级特性。


🧪 代码示例对比:字典去重

Set dict = CreateObject("Scripting.Dictionary")For i = 2 To LastRow    key = Cells(i, "A").Value    If Not dict.Exists(key) Then dict.Add key, ""NextRange("B2").Resize(dict.Count).Value = Application.Transpose(dict.Keys)
Dim dict As New Dictionary(Of String, Boolean)For i As Integer = 2 To lastRow    key = sheet.Cells(i, "A").Value.ToString()    If Not dict.ContainsKey(key) Then dict.Add(key, True)Nextsheet.Range("B2").Resize(dict.Count).Value = dict.Keys.ToArray()



选择建议:

1)仅需 Office 简单自动化 → VBA 字典(快速上手);

2)需高性能、强类型或跨平台 → VB.NET 字典(企业级开发)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94056.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94056.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94056.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年网络安全案例

以下是2024年造成严重损失的网络安全典型案例,涵盖市政系统、金融交易、区块链平台、国家级攻击及全球性IT故障五大领域,按损失规模和技术危害性综合排序:---一、市政基础设施攻击 1. 加拿大汉密尔顿市勒索软件事件 - 损失:183…

PINN+贝叶斯:深度学习中的魔改新思路

2025深度学习发论文&模型涨点之——PINN贝叶斯PINN通过将物理定律(如偏微分方程PDEs)嵌入神经网络的损失函数中,使得模型能够利用已知的物理规律来指导学习过程,从而在数据有限或噪声较多的情况下实现更高的准确性。然而&…

零基础-动手学深度学习-8.3. 语言模型和数据集

很至关重要的一章: 8.3.1. 学习语言模型 8.3.2. 马尔可夫模型与n元语法 n元语法看的序列长度是固定的, 存储的序列长是有限且可控的,使用统计方法的时候通常使用这个模型!!!统计方法!!&#x…

C++ 模板初阶

什么是模板? 模板(Template)是 C 中实现泛型编程的核心工具。它允许我们编写与具体数据类型无关的代码,从而实现代码复用和类型安全。为什么需要模板? 举个生活中的例子:如果你要造一个能装水的杯子&#x…

DockerFile文件执行docker bulid自动构建镜像

文章目录一、Dockerfile介绍二、Dockerfile镜像制作和流程使用三、Dockerfile文件的制作镜像的分层结构四、Dockerfile文件格式五、Dockerfile相关指令5.1 FROML:指定基础镜像5.2 LABEL:指定镜像元数据5.3 RUN:执行shell指令5.4 ENV&#xff…

osloader!DoGlobalInitialization函数分析之HW_CURSOR--NTLDR源代码分析之设置光标

第一部分: VOID DoGlobalInitialization(IN PBOOT_CONTEXT BootContextRecord){//// Turn the cursor off//HW_CURSOR(0,127);D:\srv03rtm\base\boot/inc/bldrx86.h:258:#define HW_CURSOR (*ExternalServicesTable->HardwareCursor)第二部分&#xff…

Elasticsearch 索引及节点级别增删改查技术

以下是针对 Elasticsearch 索引及节点级别增删改查技术做的简短总结&#xff1a; 一、索引操作创建索引 功能&#xff1a;指定分片、副本数及映射规则[2][4]。示例&#xff1a;PUT /<index_name>​&#xff0c;可定义 settings&#xff08;如分片数&#xff09;和 mappin…

烽火HG680-KD_海思MV320处理器-安卓9-原厂系统升级包-针对解决烧录不进系统的问题

烽火HG680-KD_海思MV320处理器-安卓9-原厂系统升级包&#xff08;注意是&#xff08;原机系统&#xff09;&#xff09;-主要是针对解决TTL烧录后仍然不进系统使用。HG680-KD&#xff0f;HG680-KE&#xff0f;HG680-KF&#xff0f;HG680-KX 均通用。 说明&#xff1a; 前一个…

VS2019安装HoloLens 没有设备选项

第一步先检查VS有没有安装C组件第二步把VS工程最后一个设置为启动项

【云计算】云主机的亲和性策略(二):集群节点组

《云主机的亲和性策略》系列&#xff0c;共包含以下文章&#xff1a; 1️⃣ 云主机的亲和性策略&#xff08;一&#xff09;&#xff1a;快乐旅行团2️⃣ 云主机的亲和性策略&#xff08;二&#xff09;&#xff1a;集群节点组3️⃣ 云主机的亲和性策略&#xff08;三&#xf…

【人工智能】AI代理在零售业的崛起:从草莓订购到全流程购物体验

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在零售业快速演变的格局中,AI代理正作为变革力量崛起,连接消费者需求与无缝履行。本文深入探讨AI代理在零售中的兴起,从通过对话界面订购…

【读论文】从Qwen3技术报告到Qwen3-30B-A3B 模型的深度解读

引言:当大模型追求又小又好用 最近都是各种新大模型满天飞,其中Qwen3-30B-A3B-Instruct-2507很是亮眼,这种参数尺寸是相对友好的,效果好而且模型不大。从这里就引发一下疑问,如何在保证强大能力的同时,兼顾模型的效率和可访问性?毫无疑问,混合专家 (Mixture-of-Expert…

【番外篇15】中心极限定理:从数学原理到生活案例

一、什么是中心极限定理&#xff1f;中心极限定理(Central Limit Theorem, CLT)是概率论与统计学中最重要的定理之一&#xff0c;它揭示了为什么正态分布在自然界和统计学中如此普遍。​定理表述​&#xff1a;设X₁, X₂, ..., Xₙ 是一组独立同分布的随机变量序列&#xff0c…

本地构建Docker镜像并推送到GitHub Container Registry

一、本地构建并推送镜像1. 登录GitHub Container Registry首先&#xff0c;需要登录到GitHub Container Registry (GHCR)&#xff1a;# 使用个人访问令牌(PAT)登录 docker login ghcr.io -u 你的GitHub用户名 -p 你的个人访问令牌注意&#xff1a;你需要在GitHub上创建一个具有…

DP-v2.1-mem-clean学习(3.6.8-3.6.8.1)

3.6.8 lttpr非透明模式下的链路训练 3.6.8.1 支持8b/10b链路层训练规范 ‌默认透明模式‌ 若上游设备未启用LTTPR非透明模式(Non-transparent),需在链路训练前将DPCD F0003h寄存器写入默认值55h38 ‌非法中继器计数值处理‌ 当DPCD F0002h(PHY_REPEATER_CNT)返回值非有…

kali安装maven

kali安装maven 下载maven的安装包 wget https://dlcdn.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz 注意可能返回404&#xff0c;这是因为官网已经更新了版本&#xff0c;这种情况可以自己访问https://dlcdn.apache.org/maven/maven-3查看一下最…

GEO优化:品牌营销新战场的光明与荆棘

在AI重塑信息获取方式的今天&#xff0c;一种名为GEO&#xff08;生成式引擎优化&#xff09;​的策略正悄然成为企业营销版图的新坐标。它不追求传统搜索引擎中的链接排名&#xff0c;而是争夺生成式AI&#xff08;如ChatGPT、DeepSeek等&#xff09;答案中的“话语权”——让…

牛客 - 旋转数组的最小数字

描述 有一个长度为 n 的非降序数组&#xff0c;比如[1,2,3,4,5]&#xff0c;将它进行旋转&#xff0c;即把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;变成一个旋转数组&#xff0c;比如变成了[3,4,5,1,2]&#xff0c;或者[4,5,1,2,3]这样的。请问&#xff0c;给定这…

1分钟临时共享空间在线小工具实现

运行效果&#xff1a;1分钟临时共享空间 - 免注册即时文件文本共享工具 | 极速传 直接上代码&#xff1a; using Microsoft.AspNetCore.Mvc; using SaaS.OfficialWebSite.Web.Utils; using ZXing.QrCode; using ZXing; using SkiaSharp; using ZXing.SkiaSharp.Rendering; usin…

操作系统-lecture5(线程)

进程的缺点 在创建了子进程的时候&#xff0c;得到了可以并发执行的好处 但创建了进程资源会造成浪费 线程的引入 在同一个进程中有这样两个执行流&#xff0c;为并发执行的&#xff0c;称之为线程 这里引用下《操作系统概念》中的线程概述 任务举例 在复制的过程中&#xf…