今回説明するのは、EXCELマクロ(モジュール)入りのプログラムを更新・書き換えを行うサンプルプログラムです。複数のユーザーに、EXCELマクロ(モジュール)入りのプログラムを配布した場合、修正・訂正があった場合、再度、EXCELマクロ(ファイル)を再配布する必要がありますが、これから説明する下記のサンプルプログラムでは、事前に、モジュールを更新(書き換え)プログラム入りのEXCELマクロ(モジュール)を配布する事で、ファイル配布後でも、バグ・修正・更新(追加)が有った場合は、EXCELマクロ(モジュール)入りのプログラムを更新・書き換えを簡単に行う事が出来ます。それでは、順番にサンプルプログラムを交えて説明いたします。
●事前設定(重要)
EXCELマクロ(モジュール)入りのプログラムを更新・書き換え用プログラムも実行するためには、下記の設定が必須になります。配布するPCにも同様のEXCEL設定が必要になります。
下記の設定を行わないと、実行時に下記のエラーメッセージが表示されます。
【実行時エラー’1004’ プログラミングによるVisual Basicプロジェクトへのアクセスには信頼性に欠けます。】
| 詳細説明(画像) | 説明(事前設定) |
|---|
| ①EXCEL「ファイル」をクリックします。
|
| ②「オプション」をクリックします。 |
| ③「EXCELのオプション」が開いたら、「セキュリティセンター」を選択します。
④次に、「セキュリティーセンターの設定」をクリックします。 |
| ⑤「セキュリティーセンター」の画面が表示されたら、マクロの設定をクリックします。
⑥「VBAプロジェクトオブジェクトモデルへのアクセスを信頼する」にチェックを付けます(重要)
⑦「OK」ボタンをクリックします。 |
下記のサンプルプログラムは、手動にてEXCELファイルのモジュール(プログラム)を更新・書き換えを行うサンプルプログラムです。今回のサンプルプログラムでは、Nomalファイルは、各ユーザーに配布したEXCELファイルとします。Masterファイルは、更新先のファイルとして、修正済みのモジュール(プログラム)が登録されています。
【プログラムの説明】
● Nomalファイル・・・更新元・更新したい書き換えたいモジュール(バグ・プログラム)が登録されています。
● Masterファイル・・・更新先のモジュール(修正済みのプログラム)が登録されている。(配布したいプログラム)
【プログラムの構造説明①】:モジュール管理
【Nomalファイル】
● Nomalファイルは、各ユーザーに配布するファイルです。このファイルには、【標準モジュール】が2つ登録されています。
①「Exchange」・・・は、「Module1」を更新・書き換えを実行するプログラムが登録されています。「Exchange」は、普段利用しているマクロプログラム「Module1」に修正等があった場合は、Module1に対して、MasterファイルのModule1から更新(書き換え)を行います。
②「Module1」・・・は、普段利用するプログラムが登録されています。
【Masterファイル】
● Masterファイルは、各ユーザーに配布したNomalファイルに、Module1(プログラム)のバグや修正が有った場合に、Module1の書き換え対象のファイルとなります。配布元のファイルが「Masterファイル」になります。
【プログラムの構造説明②】:運用管理
● 下図の様に、Nomalファイルは、各ユーザーに配布されています。Masterファイルにつきましは、各ユーザーからアクセスできる。ファイルサーバーなどの環境に保管してれば、ネットワーク経由で、モジュール(Module1)を更新・書き換えをする事ができます。社内にファイルサーバーが有る場合は、そのように保管していれは、ファイルを管理する管理者、Masterファイルに対してのモジュール(Module1)を更新修正するだけで、各ユーザーに最新のモジュール(プログラム)が提供する事ができます。
【プログラムの流れ】
① Module1の参照先(C:¥Master¥Master.xlsm)を読み取り専用で起動します。
② 読み取り専用で起動した「Master.xlsm」ファイルのModule1(プログラム)一時保管
③ Nomalファイル(このブック)のModule1を全て消します。
④ 一時保管した「Master.xlsm」ファイルのModule1(プログラム)を貼り付けます。(書き換え)
⑤ 参照先の「Master.xlsmファイルを閉じます。
⑥ NomalファイルのModule1(プログラム)が更新(書き換え)したので、ファイルを上書き保存します。
⑦ 【最新のモジュールに更新しました】のメッセージを表示して、終了。
【プログラム実行条件】
●事前設定(重要)を行う(上記参照)
●Masterファイルを【C:¥Master¥Master.xlsm】保管します。
●今回のプログラムでは、「Masterファイル」をPCのCドライブに保管しましたが、通常の使い方では、ファイルサーバーに保管して利用した方が本来の利用方法で活用できます。社内に、共有フォルダー等が有る場合は、その場所に「Masterファイル」を保存して利用する事をお勧めします。
【参照:VBComponents】
https://docs.microsoft.com/ja-jp/office/vba/language/reference/visual-basic-add-in-model/properties-visual-basic-add-in-model#vbcomponents
下記のサンプルプログラムは、サンプルプログラム①の応用になります。イベントプロシージャを利用して、起動時にモジュール(プログラム)を更新するか、判断します。ブック起動時に更新メッセージを表示させます。「はい」・・で更新実行。「いいえ」・・でキャンセル(何もしない)
【プログラムの説明】
今回のプログラムは、上記サンプル①の応用になります。ブック起動時に更新メッセージを表示させますので、下図の処理を追加します。
【イベントプロシージャの追加】
ここでは、イベントプロシージャのプログラム追加方法を説明いたします。
① Nomalファイルの「ThisBook」を選択します。
② WorkBook Openを選択します。
③ フック起動時に、モジュールを更新するかのプログラム(モジュール)を登録します。
(※プログラム:下記参照)
【プログラムの流れ】
① ブック起動時にモジュール更新のメッセージを表示します。
② 「はい」・・・③のプログラムを実行 「いいえ」・・・何もしない(そのままブック起動)
ーーーーーーーーー以下(サンプル①と同じ)ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
③ Module1の参照先(C:¥Master¥Master.xlsm)を読み取り専用で起動します。
④ 読み取り専用で起動した「Master.xlsm」ファイルのModule1(プログラム)一時保管
⑤ Nomalファイル(このブック)のModule1を全て消します。
⑥ 一時保管した「Master.xlsm」ファイルのModule1(プログラム)を貼り付けます。(書き換え)
⑦ 参照先の「Master.xlsmファイルを閉じます。
⑧ NomalファイルのModule1(プログラム)が更新(書き換え)したので、ファイルを上書き保存します。
⑨ 【最新のモジュールに更新しました】のメッセージを表示して、終了。
【プログラム実行条件】
●事前設定(重要)を行う(上記参照)
下記のプログラムをイベントプロシージャ部分しか掲載(追加部分)していませんので、サンプル①のプログラムに追加して利用して下さい。
'
'
'
Private Sub Workbook_Open()
Dim rc As Integer
rc = MsgBox("Module1を更新しますか?", vbYesNo + vbQuestion, "確認")
'メッセージボックスで「更新のはい・いいえ」を表示
If rc = vbYes Then '「はい」を選択
Call ModuleExchange 'Module更新プログラム実行
Else '「いいえ」を選択
MsgBox "更新を中断します"
End If
End Sub
'