[英]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
對於早期綁定的、 自動實例化的聲明導致myEvents
為Nothing
,事情需要非常非常非常破碎。
因為在創建自動實例化對象的那一刻,您永遠無法測試它是否為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.