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