首页 > 解决方案 > 告诉 VBA 查看 64 位注册表视图

问题描述

我想将一个分配ArrayList给一个变量。

Sub Create_ArrayList()
    Dim arrL As Object

    'Creating an ArrayList, option 1 - fails
    Set arrL = CreateObject("System.Collections.ArrayList")

    'Creating an ArrayList, option 2 - fails
    Set arrL = GetObject("New:{6896B49D-7AFB-34DC-934E-5ADD38EEEE39}")
End Sub

两个选项都失败:

运行时错误“-2146232576 (80131700)”:
自动化错误

我发现CLSID存在于注册表中HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID

CLSID 注册表 system.collections.arraylist

Office 是 32 位的,Windows 是 64 位的。我不熟悉注册表,但从我所读到的内容看来,32 位 Office 正试图在某些 32 位 Windows 位置(视图)中找到 ArrayList,而它实际上位于 64 位位置。可以吗?如何让应用程序从正确的位置获取 ArrayList?

看来,要访问替代注册表视图,我应该以某种方式使用标志 KEY_WOW64_64KEY(值 0x0100),但我发现的示例太大而无法理解(eg1eg2)。我不想编辑注册表数据,我只想告诉 VBA 我正在使用 64 位 Windows,所以我需要的对象是在它期望的其他地方找到的。

标签: vbaexcelwinapiregistryclsid

解决方案


推荐阅读