从VBA读取注册表子项

时间:2011-12-29 12:18:40

标签: vba registry

我有以下一段VB代码来获取注册表子项( NOT 键或注册表的值)。我只需要在Microsoft子键中列出应用程序(例如Office,记事本,键盘等)。

它在 VB.NET 中工作但是我尝试将相同的代码应用于宏中的 VBA ,我收到运行时错误,说"Object variable or With block variable not set"GetOBjectEmumKey的行上。我虽然以下代码应兼容 VB.NET VBA 。 有人可以解释一下吗?

Dim temp As Object
'On Error Resume Next
Const HKEY_CURRENT_USER = &H80000001
temp = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\default:StdRegProv")

Dim rPath As String
rPath = "Software\Microsoft\IdentityCRL\UserExtendedProperties"

Dim arrSubKeys(5) As Object
temp.EnumKey(HKEY_CURRENT_USER, rPath, arrSubKeys)

For Each ask In arrSubKeys
    MsgBox(ask.ToString)
Next

1 个答案:

答案 0 :(得分:12)

对于VBA,请尝试这样

  • temp是一个对象,需要与Set
  • 一起使用
  • temp.Enum语法为temp.EnumKey HKEY_CURRENT_USER, rPath, arrSubKeys而非temp.EnumKey(HKEY_CURRENT_USER, rPath, arrSubKeys)
  • Dim您的变量位于代码顶部以获得整洁:)

此代码将HKEY_CURRENT_USER\Software\Microsoft\下的所有文件夹列出到VBE的立即窗口

Const HKEY_CURRENT_USER = &H80000001
Sub TestME()
    Dim temp As Object
    Dim strComputer As String
    Dim rPath As String
    Dim arrSubKeys()
    Dim strAsk

    strComputer = "."
    Set temp = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\default:StdRegProv")

    rPath = "Software\Microsoft\"
    temp.EnumKey HKEY_CURRENT_USER, rPath, arrSubKeys
    For Each strAsk In arrSubKeys
        Debug.Print strAsk
    Next
End Sub

example output