字典在VBA與VB.NET的區別,舉例說明

簡述:

在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…