簡體   English   中英

VBA Excel 宏無法創建 SortedList

[英]VBA Excel macro can't create SortedList

我有一個在 Excel 中運行並使用 SortedList 的 VBA 宏。 在大多數機器上它運行良好。 一方面,線

Dim myEvents As New SortedList

導致 myEvents 的值為 Nothing。

myEvents = createobject("system.collections.sortedlist")

導致“自動化錯誤”。 mscorlib.dll 在我的參考文獻中並被檢查。

有人知道發生了什么嗎? 由於宏適用於其他機器,我認為這一定是系統設置問題,但我不知道它可能是什么。

OS Name Microsoft Windows 10 Pro
Version 10.0.18362 Build 18362
System Model    Surface Laptop
System Type x64-based PC
Dim myEvents As New SortedList

對於早期綁定的、 自動實例化的聲明導致myEventsNothing ,事情需要非常非常非常破碎。

因為在創建自動實例化對象的那一刻,您永遠無法測試它是否為Nothing並獲得True - 這個斷言永遠無法滿足,因為僅在表達式中引用myEvents就足以讓 VBA 去重新實例化該對象在它評估Is Nothing之前:

Debug.Assert myEvents Is Nothing

您只能使用對定義此類的類型庫的項目引用將某些內容聲明As SortedList

 myEvents = createobject("system.collections.sortedlist")

這里有兩個問題:一,缺少Set關鍵字。 我們正在分配一個對象引用, Set是必需的。 接下來是使用CreateObject來創建在已加載和引用的庫中定義的類型的New實例:編譯器已經知道在哪里可以找到該類型,但是無論如何您都要讓它點擊 Windows 注冊表來查找。 改為New它,並為未引用的庫中定義的內容保留CreateObject

Set myEvents = New SortedList

假設參考是正確的,這應該就是你所需要的。

mscorlib.dll 在我的參考文獻中並被檢查。

不是 DLL,而是 TLB。 它必須是要運行它的計算機的正確位數,並且正確的位數必須與主機應用程序(即 Excel)的位數相匹配。

您不能提前綁定到C:\\Windows\\Microsoft.NET\\Framework64\\並讓它在 32 位 Excel 中工作。 而且你不能提前綁定到C:\\Windows\\Microsoft.NET\\Framework\\並讓它在 64 位 Excel 中工作。

如果您的某些用戶使用的是不同位數的 Office 安裝,請修復他們的安裝以匹配其他人的安裝,或者刪除引用並使用后期綁定:

Dim myEvents As Object
Set myEvents = CreateObject("System.Collections.SortedList")

不利的一面是,您將在黑暗中編碼,沒有編譯器幫助和附近的文檔

從好的方面來說,后期綁定代碼應該適用於所有 Windows 系統。

我有一個類似的問題,結果證明問題是在找不到 mscorlib 之前的參考,在這種情況下,工具 > 參考頁面有“缺少:Microsoft Excel 16.0 對象庫”。 我通過取消選中丟失的庫,選擇確定然后重新添加 mscorlib 引用來解決它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM