ブックを開いたときに期限忘れ防止の通知を出す

ファイルを開いたときに、当日または近日中に行う処理についての通知を自動表示するマクロです。

通知ダイアログボックス

ファイルを開くと同時にこんな通知が表示されます

同じファイルを毎日のように開いて入力を行うが、特定の日には異なる処理が必要といった業務はよくあると思います。そして「特定の日」の部分をついスルーしてしまうということも…。

ならば、そのファイル自体にイベントを登録して通知を出すようにしようというわけです。

準備:期限リストの作成

1列目に日付、2列目に内容を入力したリストを作成し、リストの範囲に名前を設定します。名前は、[数式]タブの[名前の定義]から設定できます。

リストの作成後は、そのワークシートが邪魔な場合は非表示にしても構いません。

マクロコード

標準モジュールに登録します。プロシージャ名 Auto_Open は変更不可です。

Private Sub Auto_Open()

  Const nameSht As String = "期限Sheet"  '期限リストのあるシート
  Const nameRng As String = "期限List"   '期限リストの範囲の名前
  Dim aryDay  '期限リストを格納する配列
  Dim aMsg1 As String, aMsg2 As String
  Dim i As Long, m As Long

  On Error GoTo EXTSUB
  aryDay = ThisWorkbook.Sheets(nameSht).Range(nameRng)
  For i = 1 To UBound(aryDay)
    m = aryDay(i, 1) - Date
    Select Case m
    Case 0  '期限当日
      aMsg1 = aMsg1 & vbCrLf & aryDay(i, 2) & " の期限は【本日】です!!"
    Case 1 To 3  '1~3日後期限
      aMsg2 = aMsg2 & vbCrLf & m & "日後 : " & aryDay(i, 2)
    End Select
  Next i

  If aMsg1 & aMsg2 = "" Then GoTo EXTSUB
  If aMsg1 <> "" Then aMsg1 = aMsg1 & vbCrLf & vbCrLf
  MsgBox  aMsg1 & aMsg2, vbInformation, "直近の期限"

EXTSUB:
End Sub

Workbook_Open と Auto_Open

ファイルを開いたときに自動実行するマクロとしては、イベントプロシージャのWorkbook_Open のほうが主流ですが、標準モジュールの Auto_Open もあります。

実用上の重要な違いは、ほかのブックのマクロからブックが開かれた場合に、Workbook_Openは実行される、Auto_Openは実行されない という点です。今回のようなルーティン業務のブックは、集計などでほかのマクロから開かれることもありうるので、その際にメッセージが表示されて処理中断になることを避けるため、Auto_Openを用いました。

Auto_Openは旧バージョンとの互換用なので使用は控えるべきという説もあるのですが、筆者はそう警戒しなくてもよいと思います。365になっても普通に使えますし、積極的に廃止する理由もないでしょうから。

応用について

マクロ有効ブック(xlsm)にしたくない場合や、複数のファイルでオープン時の自動実行を行いたい場合は、こちらの方法で応用できます。

タイトルとURLをコピーしました