Excel VBA のマクロを、複数のブックから利用するには下記の方法があります。
Sub call_hoge() Workbooks.Open Filename:="D:\bbb.xlsm", ReadOnly:=True Application.Run "'bbb.xlsm'!Module1.hoge" Windows("bbb.xlsm").Close End Sub Sub call_hello() Workbooks.Open Filename:="D:\bbb.xlsm", ReadOnly:=True MsgBox Application.Run("'bbb.xlsm'!Module1.hello", "World") Windows("bbb.xlsm").Close End Sub
Sub hoge() MsgBox "hoge" End Sub Function hello(x) hello = "Hello, " & x & "!" End Function
' ワークブックを開く時のイベント Private Sub Workbook_Open() ' txtに書いてある外部ライブラリを読み込み load_from_conf ".\libdef.txt" End Sub ' -------------------- モジュール読み込みに関する関数 -------------------- ' 設定ファイルに書いてある外部ライブラリを読み込みます。 Sub load_from_conf(conf_path) ' 全モジュールを削除 clear_modules ' 絶対パスに変換 conf_path = abs_path(conf_path) If Dir(conf_path) = "" Then MsgBox "外部ライブラリ定義" & conf_path & "が存在しません。" Exit Sub End If ' 読み取り fp = FreeFile Open conf_path For Input As #fp Do Until EOF(fp) ' 1行ずつ Line Input #fp, temp_str If Len(temp_str) > 0 Then module_path = abs_path(temp_str) If Dir(module_path) = "" Then ' エラー MsgBox "モジュール" & module_path & "は存在しません。" Exit Do Else ' モジュールとして取り込み include module_path End If End If Loop Close #fp ThisWorkbook.Save End Sub ' あるモジュールを外部から読み込みます。 ' パスが.で始まる場合は,相対パスと解釈されます。 Sub include(file_path) ' 絶対パスに変換 file_path = abs_path(file_path) ' 標準モジュールとして登録 ThisWorkbook.VBProject.VBComponents.Import file_path End Sub ' 全モジュールを初期化します。 Private Sub clear_modules() For Each component In ThisWorkbook.VBProject.VBComponents If component.Type = 1 Then ' この標準モジュールを削除 ThisWorkbook.VBProject.VBComponents.Remove component End If Next component End Sub ' ファイルパスを絶対パスに変換します。 Function abs_path(file_path) ' 絶対パスに変換 If Left(file_path, 1) = "." Then file_path = ThisWorkbook.Path & Mid(file_path, 2, Len(file_path) - 1) End If abs_path = file_path End Function
.\HogeModule.bas .\FugaModule.bas
' hogeのためのモジュール。 Attribute VB_Name = "HogeModule" Sub hoge() MsgBox "hoge" End Sub Function hello(x) hello = "Hello, " & x & "!" End Function
' fugaのためのモジュール。 Attribute VB_Name = "FugaModule" Sub fuga() MsgBox "fuga" End Sub
下記の設定をしないと「プログラミングによるVisual Basicプロジェクトへのアクセスは信頼性に欠けます」というエラーメッセージが出て処理ができません。
ツール>マクロ>セキュリティ>信頼できる発行元>Visual Basic プロジェクトへのアクセスを信頼する をオン
リボンの「開発」タブ>マクロのセキュリティ>VBAプロジェクトオブジェクトモデルへのアクセスを信頼する http://support.microsoft.com/kb/282830/ja