読者です 読者をやめる 読者になる 読者になる

ファイルに保存されたマクロを動的にロードする方法(Excel VBA)

以下のコードでファイルに保存されたマクロを動的にロード出来ます。 ちょっとめんどくさいのは、デフォルト設定のExcelでは「プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます」の実行時エラーになってしまい、実行できません。 なので、「マクロの設定」の「VBA プロジェクトオブジェクトモデルへのアクセスを信頼する」をチェックしないといけません。

f:id:rbtnn:20161002013544p:plain

ThisWorkbookシート

Option Explicit

' ---------------------------------------------
' ファイルに保存されたマクロを動的にロードする。
' ---------------------------------------------

Private Sub Workbook_Open()
    Call ClearModules
    Call ImportModule(ThisWorkbook.Path & "\ModMain.bas")
End Sub

Private Sub Workbook_Close()
    Call ClearModules
End Sub

Private Sub ImportModule(ByVal strFilePath As String)
    Dim objFS As Object
    Set objFS = CreateObject("Scripting.FileSystemObject")
    If objFS.FileExists(strFilePath) Then
        ThisWorkbook.VBProject.VBComponents.Import strFilePath
    Else
        Call MsgBox("モジュールが存在しません。" & vbCrLf & strFilePath)
    End If
    Set objFS = Nothing
End Sub

Private Sub ClearModules()
    Dim varComponent As Variant
    For Each varComponent In ThisWorkbook.VBProject.VBComponents
        If varComponent.Type = 1 Then
            ThisWorkbook.VBProject.VBComponents.Remove varComponent
        End If
    Next
End Sub

' 【Excel】実行エラー「プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます」の対策
' http://saku-saku-pc.com/excel/プログラミングによるアクセス/