非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Excelマクロを外部ファイルにして複数ブックから利用できるようにする

      2021/10/04

※2021/10/4 更新

Excelマクロは便利なのですが、ブックファイルの中にプログラムを仕込むので、基本使うマクロはそのファイル内に記述します。ここで問題になるのが、プログラムの最新管理。同じ内容のプログラムでもファイルごとに保存しているので、プログラムを修正する場合にすべてのファイルに対して修正しなければなりません。この工数がマクロの最大の欠点となります。

会社で、同じマクロを入れたファイルがコピーにコピーを重ねて増殖し、今度はそれを修正することになって、えらい苦労したことがあります。そうならないためにも、サクッと最新プログラムに更新できるよう、あらかじめ仕掛けておく必要があります。

ソースコード

そのプログラムがこちらです。但し、これだけでは動きません。後述する設定が必要なので最後までお読みください。

Sub replaceModule()
   ModuleNames = "Module1, Module2"
   PathName = "C:\Users\user1\Documents"
   Dim FileNames As Variant
   FileNames = Split(ModuleNames, ",")
   For Each cmp In ThisWorkbook.VBProject.VBComponents
      If InStr(ModuleNames, cmp.Name) > 0 Then
         ThisWorkbook.VBProject.VBComponents.Remove cmp
      End If
   Next cmp
   For i = 0 To UBound(FileNames)
      file_path = PathName & "\" & Trim(FileNames(i)) & ".bas"
      If Dir(file_path) = "" Then
         MsgBox (file_path & " は存在しません。スキップします。")
      Else
         ThisWorkbook.VBProject.VBComponents.Import file_path
      End If
   Next i
End Sub
 

 

最初の2行で、

  • ModuleNames :更新するモジュール名。カンマ区切りで指定
  • PathName :最新のプログラムが置かれる共有フォルダのパス

を指定します。

あとは、指定した共有フォルダに、Module1.bas, Module2.bas というマクロファイルを置いてください。

 

参照設定

次に参照設定を行います。Visual Basic Editorのメニューから「ツール」-「参照設定」を選びます。

 

以下のようなダイアログが現れるので、リストから「Microsft Visual Basic for Application Extensibility」にチェックを入れて「OK」ボタンを押します。

リボンに「開発」タブを追加する

次にマクロのセキュリティ設定をするのですが、その前にリボンに「開発」タブを表示させる必要があります。もしすでに表示させているのであれば読み飛ばしてください。

 

リボンの適当な場所で右クリックしてプルダウンメニューから「リボンのユーザー設定」をクリックします。

 

以下のダイアログが現れるので赤枠の「開発」にチェックを入れてOKボタンを押します。これでリボンに開発タブが現れたはずdす。

マクロのセキュリティ設定

「開発」タブの「マクロのセキュリティ」をクリックします。

以下のダイアログが現れるので、「VBAプロジェクト オブジェクト モデルのアクセスを信頼する」にチェックを入れて「OK」ボタンを押します。これでセキュリティ設定は完了です。

実行

それでは先ほど示したマクロを実行してみましょう。

下記の通り指定フォルダ内のモジュールをインポートできました。

 

管理者はモジュールファイルを最新にした後、各ユーザー側で、replaceModule()を実行してもらうことで、最新ファイルにリプレイスされるわけです。

 

スポンサーリンク

 - VBA