シートとブック

ブック開く時、閉じる前の処理実行

 ブックを開く時にある決まった処理を実行したいとき、そしてブックを閉じる直前に決まった処理を実行して終了したいときの方法について解説します。

ブックを開く時に処理実行

 ブックを開いた時、ある決まった処理を自動で実行させる必要がある時「Workbook_Open プロシージャ」を使います。

  Private Sub Workbook_Open()

 この時のVBA記載は、下記図のようにまず

①「ThisWorkbook」をダブルクリックしコードウィンドウを表示

② オブジェクトボックスで「Workbook」を選択

③ プロシージャボックスで「Open」を選択

これで空の 「Workbook_Open イベントプロシージャ」が作成されますので、ここに実行したい処理の VBA を記載します。

Private Sub Workbook_Open()

 Worksheets(“Sheet3”).Range(“C2”).Value = Date

End Sub

ブックのオープンと同時に「シート3 の セル C2」にその日の年月日が表示されています。

ブックを閉じる前の処理実行

 ブックを閉じる直前に何かの処理を実行したい場合は「Workbook_BeforeCloseイベント」を使います。

  Private Sub Workbook_BeforeClose(Cancel As Boolean)

 この時のVBA記載は、下記図のようにまず

①「ThisWorkbook」をダブルクリックしコードウィンドウを表示

② オブジェクトボックスで「Workbook」を選択

③ プロシージャボックスで「BeforeClose」を選択

これで空の 「Workbook_BeforeClose イベントプロシージャ」が作成されますので、ここに実行したい処理の VBA を記載します。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

 Dim I As Long

 Dim P As Long

 Dim KK As String

 Dim XS As Long

 XS = 0

 For I = 2 To 5 ‘①

  For P = 6 To 10 ‘②

   KK = Cells(P, I) ‘③

   If KK = “” Then

    XS = I  ‘④

   End If

  Next P

  If XS <> 0 Then

   Exit For  ‘⑤

  End If

 Next I

 If XS = 2 Then ‘⑥    

  MsgBox “No欄に未入力あり” ‘⑦

  Cancel = True ‘⑧

 ElseIf XS = 3 Then ‘⑨

  MsgBox “氏名欄に未入力あり”

  Cancel = True

 ElseIf XS = 4 Then ‘⑩

  MsgBox “TEL欄に未入力あり”

  Cancel = True

 ElseIf XS = 5 Then ‘⑪

  MsgBox “担当CODE欄に未入力あり”

  Cancel = True

 End If

End Sub

① 列番号

② 行番号

③ 各セル内容をKKに代入

④ KKが空白の場合、XSにその列番号を代入

⑤ 空白がある場合チェック作業から離脱

⑥ No欄に空白がある場合

⑦ その旨をメッセージする

⑧ ブックが閉じるのを中止する

⑨ 氏名欄に空白がある場合

⑩ TEL欄に空白がある場合

⑪ 担当CODE欄に空白がある場合

⑧の「Cancel = True」でブックを閉じるのを中止しますが、「Cancel = False」にした場合は、そのままブックが閉じられてしまいます。

ブックの保存と現在パス  ブックは必ずしも閉じる時のみに保存されるものではありません。作成途中で一旦保存し、その後そのまま作業を継続することがあります。プログ...