2011-12-29 200 views
4

我有以下一段VB代碼來獲取註冊表子項(NOT註冊表的鍵值或值)。我只需要列出Microsoft子項中的應用程序(例如Office,記事本,鍵盤等)。從VBA讀取註冊表子項

它的工作VB.NET,但我想同樣的代碼適用於VBA在宏,我得到一個運行時錯誤說對GetOBjectEmumKey"Object variable or With block variable not set"。我雖然下面的代碼應該兼容VB.NETVBA。 任何人都可以請解釋一下嗎?

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

VB.NET是*不*像VBA立即窗口。爲其中一個寫的代碼不會也不應該在另一箇中編譯。 – 2011-12-29 12:24:40

+0

我實際上在google上得到這段代碼片段,它是爲VBA編寫的。奇怪的是,它在Visual Studio中編譯和運行良好,但在Excel中的VBA宏中出現錯誤。 – KMC 2011-12-29 12:29:45

+0

@CodyGray,對不起,說他們彼此沒有任何關係,這只是不正確也沒有幫助。我不希望任何人閱讀你的評論,相信這一點。實際上,它們非常相似,都使用BASIC語法,因此KMC的代碼片段非常易於在任何環境下以最小的更改進行工作(如下面的答案),這正是KMC提供幫助的地方。我們可以抱怨優化,但完全不同。 – Chalky 2014-08-11 21:52:59

回答

9

對於VBA嘗試這樣

  • temp是一個對象,並需要與集
  • 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

+0

非常感謝!它工作得很好。 Q1:爲什麼分配點「。」到一個變量,而不是連接它指向字符串? Q2:arrSubKeys和strAsk沒有被聲明爲一個類型(即Object,String)並且仍然可用? – KMC 2011-12-30 08:18:20

+1

@KMC很高興有幫助。 1)'StrComputer'變量通常用於vbscript來引用網絡中不同的機器,'.'是本地機器。所以我採用了更靈活的標準,而不是對''進行硬編碼。'2)這是因爲這些變量是不同的,所以可以不加修改。 – brettdj 2011-12-30 08:26:11

+1

剛剛經過測試,它似乎它甚至迎合了HKLM中的32/64位問題,因此實際的密鑰在軟件\ Wow6432Node \ ... 頂部工作小組! – 2014-03-18 17:49:25