VBAでは操作をきっかけとして自動的に実行されるプロシージャの事を「イベントプロシージャ」と言います。自動実行のきっかけとなる操作の事を「イベント」と呼び、「イベント」はブックやワークシート、ユーザーフォーム等のオブジェクトに対して発生します。このイベントを利用して「ブックを保存する時に発生するイベントプロシージャの作り方」について紹介します。
構文
イベントプロシージャの記述方法は以下の通りです。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
[実行する処理内容]
End Sub
[説明]:
ブックを保存する時に実行されるイベントプロシージャです。
[実行する処理内容] | イベントが実行された時に処理する内容を記述します。 |
このイベントプロシージャにはオプションが設定されています。
オプションの内容は以下の通りとなります。
オプション | 内容 |
SaveAsUI | 名前を付けて保存するか否かを指定できます。 ・「True」を指定した場合:名前を付けて保存する指定となります。 ・「False」を指定した場合:上書き保存する指定となります。 ※初期値は「False」がセットされています。 |
Cancel | イベントの実行/中止を指定できます。 ・「True」をセットした場合:イベントを中止します。 ・「False」をセットした場合:イベントを実行します。 ※初期値は「False」がセットされています。 |
[記述例]:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "保存します。"
End Sub
作り方
(1)VBE(VBA記述画面)を開きます。
※画面の開き方はこちらの手順を参考にして下さい。
(2)ブックオブジェクトをダブルクリックします。
(3)オブジェクトボックスの▼ボタンをクリックします。
(4)プルダウン一覧の中から「WorkBook」を選択します。
(5)この時点で「Workbook_Open」イベントプロシージャが表示されます。(これは自動的に作成される仕組みとなっている様です。)
(6)プロシージャボックスの▼ボタンをクリックします。
(7)プルダウン一覧の中から「BeforeSave」を選択します。
(8)「Workbook_BeforeSave」イベントプロシージャが表示されます。
(9)(8)で作成したイベントプロシージャに実行させる内容を記述します。以下で記述例を4つ紹介します。
(例①)ブック保存時にメッセージを表示する方法
ブックを保存する時にメッセージを表示する方法について紹介します。
[プログラミング例①]:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "保存します。"
End Sub
内容は、「ブックを保存する時に”保存します。”をMsgBoxで表示して下さい。」との意味になります。
[実行例①]:
今回の例としては、Book1.xlsmブックが開かれており、Book1.xlsmブックには上記で説明したプログラミング例①が記述されています。
(実行前)
Book1.xlsmブックの<保存>ボタンをクリックします。
(実行後)
Book1.xlsmブックが保存される前に「保存します。」が表示されます。(※Book1.xlsmブックを保存する事で、プロシージャが実行されてメッセージが表示されました。)
[サンプル①]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
(例②)ブック保存時に特定セルが空白の場合は保存を中止する方法
ブックを保存する時に特定セルが空白の場合は保存を中止する方法について紹介します。
[プログラミング例②]:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If (Trim(Range("A1")) = "") Then
MsgBox "保存できません。"
Cancel = True
End If
End Sub
内容は、「ブックを保存する時にA1セルが空白の場合は”保存できません。”をMsgBoxで表示し、イベントを中止して下さい。」との意味になります。
[実行例②]:
今回の例としては、Book1.xlsmブックが開かれており、Book1.xlsmブックには上記で説明したプログラミング例②が記述されています。
・A1セルに文字が入力されている場合
(実行前)
Book1.xlsmブックのA1セルに「テスト」の文字が入力されています。<保存>ボタンをクリックします。
(実行後)
問題なく保存されたためメッセージは表示されません。
・A1セルに文字が入力されていない場合
(実行前)
Book1.xlsmブックのA1セルは空白の状態です。<保存>ボタンをクリックします。
(実行後)
「保存されません。」が表示されます。(※A1セルが空白のため、メッセージが表示されてイベントが中止されました。)
[サンプル②]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
(例③)ブックの上書き保存を不可にする方法
ブックの上書き保存を不可にする方法について紹介します。
[プログラミング例③]:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If (SaveAsUI = False) Then
MsgBox "上書き保存はできません。"
Cancel = True
End If
End Sub
内容は、「ブックを上書き保存しようとした場合は”上書き保存できません。”をMsgBoxで表示し、イベントを中止て下さい。」との意味になります。
[実行例③]:
今回の例としては、Book1.xlsmブックが開かれており、Book1.xlsmブックには上記で説明したプログラミング例③が記述されています。
(実行前)
Book1.xlsmブックの<保存>ボタンをクリックします。
(実行後)
「上書き保存はできません。」が表示されます。(※<保存>ボタンをクリックした事で上書き保存しようとしましたが、メッセージが表示されてイベントが中止されました。)
[サンプル③]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
(例④)ブックの名前を付けて保存を不可にする方法
ブックの名前を付けて保存を不可にする方法について紹介します。
[プログラミング例④]:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If (SaveAsUI = True) Then
MsgBox "名前を付けて保存はできません。"
Cancel = True
End If
End Sub
内容は、「ブックを名前を付けて保存しようとした場合は”名前を付けて保存できません。”をMsgBoxで表示し、イベントを中止て下さい。」との意味になります。
[実行例④]:
今回の例としては、Book1.xlsmブックが開かれており、Book1.xlsmブックには上記で説明したプログラミング例④が記述されています。
(実行前)
Book1.xlsmブックの「ファイル」をクリックします。
「名前を付けて保存」をクリックします。
「参照」をクリックします。
(実行後)
「名前を付けて保存はできません。」が表示されます。(※名前を付けて保存しようとしましたが、メッセージが表示されてイベントが中止されました。)
[サンプル④]:
上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。
ブックを保存する時に発生するイベントプロシージャの作成方法についての説明は以上です。
おわりに
今回はブックを保存する時に発生するイベントプロシージャの作成方法について説明しました。オブジェクトボックスでオブジェクトを選択すると、そのオブジェクト既定の「Workbook_Open」イントプロシージャが自動的に作成(上記(5)の内容)されます。不要な場合は削除して下さい。