iEhohs.com

社内SEとウェブ担当を目指す人のメモブログ

Excel VBAでレジストリキーにアクセスする

業務効率化

データベースから値を引っ張ってきてExcelに落とすのに必要なようです。

任意のレジストリキーにアクセスするには?

引き継いだファイルのVBAなのですが、何がなにやらさっぱりなのでググってみると上記のサイトを参考にしていたようです。

VBA

備忘録として活用したいので、失礼ながらコードを引用させていただきます。

コメントだけは消しています。コメントや詳細については上記の引用元サイトを参照してください。

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _
          (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
          ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" _
          (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
          ByVal dwType As Long, ByVal lpData As Any, ByVal cbData As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _
          (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
          lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Const ERROR_SUCCESS = 0
Private Const REG_SZ = 1
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_USERS = &H80000003
Public Const HKEY_CURRENT_CONFIG = &H80000005


Public Function SetRegValue(lngRootKey As Long, strSubKey As String, _
                    strName As String, strValue As String)

  Dim lngRet As Long
  Dim hWnd As Long

  hWnd = Application.hWndAccessApp
  lngRet = RegOpenKeyEx(lngRootKey, strSubKey, 0, KEY_SET_VALUE, hWnd)
  lngRet = RegSetValueEx(hWnd, strName, 0, REG_SZ, ByVal strValue, LenB(strValue))
  RegCloseKey hWnd
  
  SetRegValue = (lngRet = ERROR_SUCCESS)

End Function


Public Function GetRegValue(lngRootKey As Long, strSubKey As String, _
                    strName As String) As String
  Dim lngRet As Long
  Dim hWnd As Long
  Dim strValue As String

  hWnd = Application.hWndAccessApp
  lngRet = RegOpenKeyEx(lngRootKey, strSubKey, 0, KEY_QUERY_VALUE, hWnd)
  strValue = String(255, " ")
  lngRet = RegQueryValueEx(hWnd, strName, 0, 0, ByVal strValue, LenB(strValue))
  RegCloseKey hWnd
  
  strValue = Left(strValue, InStr(strValue, vbNullChar) - 1)
  GetRegValue = strValue

End Function

各コードの詳細

ここからは僕が調べてわかったことをノート代わりに書いていきます。

調べて意味がわかり次第、随時追記していきます。

RegOpenKeyEx

指定されたレジストリキーを開きます。

RegOpenKeyEx(キーのハンドル, オープンするサブキー, 予約 0を指定, セキュリティアクセスマスク, ハンドルを格納する変数)

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です