Чтение подразделов реестра из VBA - PullRequest
5 голосов
/ 29 декабря 2011

У меня есть следующий фрагмент кода VB для получения подраздела реестра ( НЕ ключ или значение реестра). Мне просто нужно перечислить приложения в подразделе Microsoft (например, Office, Notepad, Keyboard и т. Д.).

Это работало в VB.NET , но я пытаюсь применить тот же код к VBA в макросе, я получаю сообщение об ошибке во время выполнения, сообщающее "Object variable or With block variable not set" в строке GetOBject и EmumKey. Хотя следующий код должен быть совместим для 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 Ответ

12 голосов
/ 29 декабря 2011

Для 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\ в окне Immediate 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...