レジストリ操作

[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
                                                    
                                                    
'指定されたレジストリキーに所属する、
'指定された 1 つのレジストリエントリのデータとデータ型を設定
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, _
                                                    lpData As Any, _
                                                    ByVal cbData As Long) As Long
'指定されたレジストリキーのハンドルを閉じる。
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Const HKEY_CURRENT_USER = &H80000001
Private Const ERROR_SUCCESS = 0&
Private Const KEY_SET_VALUE = &H2
Private Const REG_DWORD = 4

Sub セキュリティ警告解除()
    
    Dim varVersion As Variant
    Dim lngKey As Long
    Dim lngNewData As Long
    Dim lngValue As Long
    Dim strRegKey, strSubKey As String
       
    'Accessのバージョンを調べます。
    varVersion = SysCmd(acSysCmdAccessVer)
    'Access2003は11.0,Access2007は12.0,Access2010は14.0を返します。
    
    strRegKey = "Software\Microsoft\Office\" & varVersion & "\Access\Security\"
    
    Select Case varVersion
    Case "11.0"
        strSubKey = "Level"
    Case "12.0", "14.0"
        strSubKey = "VBAWarnings"
    End Select

    'レジストリキーをオープン
    If RegOpenKeyEx(HKEY_CURRENT_USER, strRegKey, 0, _
			KEY_SET_VALUE, lngKey) = ERROR_SUCCESS Then

        lngNewData = 1
        RegSetValueEx lngKey, strSubKey, 0&, REG_DWORD, lngNewData, Len(lngValue)
        
        RegCloseKey lngKey  'レジストリキーをクローズ
    End If

End Sub


'--- VBAWarnings の値 ---

'VBAWarnings=1 [マクロに対しセキュリティ チェックを行わない]
'VBAWarnings=2 [すべてのマクロについて、セキュリティ バーで警告を表示する]
'VBAWarnings=3 [デジタル署名付きのマクロについてのみ、セキュリティ バーで警告を表示する]
'VBAWarnings=4 [警告を表示せずにすべてのマクロを無効にする]				


コンポーネントオブジェクトのレジストリ登録

使用例

'コンポーネントオブジェクトをMY.dllと仮定します。

Sub COMレジ登録()
    Dim objWscript As Object
    
    Set objWscript = CreateObject("Wscript.Shell")
    
    objWscript.Run "cmd /k CD C:\..\ & regsvr32 MY.dll & exit", 0, True

    Set objWscript = Nothing
End Sub


Sub COMレジアンインストール()
    Dim objWscript As Object
    
    Set objWscript = CreateObject("Wscript.Shell")
    
    objWscript.Run "cmd /k CD C:\..\ & regsvr32 /u MY.dll & exit", 0, True

    Set objWscript = Nothing
End Sub