인터넷에서 검색 한 결과이 문제에 대한 해결책을 찾는 데 문제가 있습니다.Windows 셸을 사용하여 VBA 내에서 레지스트리 키 읽기
기본적으로 VBA 내에서 Shell.Application을 사용하여 관리자 권한으로 레지스트리 쿼리를 실행하여 TypeGuessRows
의 값을 읽으려고합니다. 결국은 Excel을 사용하여 ADOdb를 사용하여 데이터를 올바르게 쿼리 할 수 있도록 0으로 수정합니다. 나는 다음과 같은 서브 루틴 올라와있다 : 모든 것은이 루틴에서 반환
Sub Read_Registry_Value()
'Declare variables
Dim reg_key_location As String
Dim reg_key_name As String
Dim wsh As Object
'Define registry key path and name
reg_key_location = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\15.0\Access Connectivity Engine\Engines\Excel"
reg_key_name = "TypeGuessRows"
'Create instance of windows shell
Set wsh = VBA.CreateObject("Shell.Application")
'Execute registry query with administrative privileges
wsh.ShellExecute "cmd", _
"/K REG QUERY " & Chr(34) & reg_key_location & Chr(34) & " /v " & reg_key_name, _
"", _
"runas", _
1
End Sub
은 다음과 같습니다
ERROR :
The system was unable to find the specified registry key or value.
레지스트리 키가 가장 확실히 존재하지만
. 아래 스크린 샷을 참조하십시오. 또한 위의 코드에 따라 관리자 권한으로 명령 프롬프트를 실행해야합니다.는 또한
REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\15.0\Access Connectivity Engine\Engines\Excel" /v TypeGuessRows
직접 명령 프롬프트가 모든 관리자 권한없이 작동 ... 명령을 실행. CMD에서
REG 수동으로 편집 : 그래서 제대로 작동이 기능이 문제에 어떤 도움을 얻는 방법에 잃었어요
이 많이 주시면 감사하겠습니다!
****의 UPDATE ****
좋아, 그래서 난이 첫 번째 대답에 Dinotom에 의해 제안 코드를 구현했습니다. 아래 코드를 참고하십시오. 다음과 같은 오류가 들어 X = 0 ... 줄에 반환 그러나
Sub Read_Registry()
Dim entryArray() As Variant
Dim valueArray() As Variant
Dim reg_key_location As String
Dim x As Integer
reg_key_location = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\15.0\Access Connectivity Engine\Engines\Excel"
Call EnumerateRegEntries(reg_key_location, entryArray, valueArray)
For x = 0 To UBound(entryArray)
'Do something here
Next x
End Sub
Public Sub EnumerateRegEntries(keyPath As String, arrEntryNames As Variant, arrValueTypes As Variant)
Dim registryObject As Object
Dim rootDirectory As String
rootDirectory = "."
Set registryObject = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
rootDirectory & "\root\default:StdRegProv")
registryObject.EnumValues HKEY_LOCAL_MACHINE, keyPath, arrEntryNames, arrValueTypes
End Sub
...
ERROR :
Run-time error '9' Subscript out of range.
그것은 배열은 인구가되고있는 것처럼 보이지 않는다 아래 제안 된 레지스트리 데이터로 더 이상 아이디어가 없습니까?
그 Sub는 모든 reg 키 테스트에 대해 나를 위해 작동하므로 잘못된 키 경로가 있거나 해당 레지스트리 키에 대한 허가 문제가 있습니다. – dinotom
테스트 한 핵심 경로에 대해이 하위 항목이 작동하지 않습니다. 나는 시도했다 ... HKEY_LOCAL_MACHINE \ SOFTWARE; HKEY_LOCAL_MACHINE \ HARDWARE; HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ Common의 몇 가지 예입니다 (HKLM 접두어를 생략 한 동일한 키 이외에). 그래서 확실히 파일 경로 문제가 아닙니다. 어쩌면 허가하는거야? ... 어떤 OS를 실행하고 있습니까? Windows 10을 사용하고 있습니다. 문제의 다른 아이디어도 있습니다. – Josh