シートが挿入されたときに実行するNewSheetイベント
イベントマクロ 16回
シートが挿入されたときに実行するNewSheetイベント
ブックのイベントとして、これまでブックが開かれたときに発生するOpenイベント、ブックを閉じる前に処理するWorkbook_BeforeClose、印刷する直前に発生するBefore.Printを紹介してきました。
今回は新しいシートを挿入した時に発生するNewSheetイベントを学習しましょう。
(サンプルファイルは、こちらから
イベントマクロ16回サンプルデータ)
シートが挿入時はNewSheetイベントが起きている
シートを新しく挿入すると、NewSheetイベントが発生します。このイベントでは引数として、新たに作成されたWorksheetオブジエクト、またはChartオブジェクトなどを表す意味で Sh が利用できます。
NewSheetの構文
Workbook_NewSheet(ByVal Sh As Object)
引数名 | データ型 | 説明 |
---|---|---|
Sh | Object | イベントが発生すると、新しいシートが渡されます。 Worksheet オブジェクトまたは Chart オブジェクト を指定 できます。 |
Private Sub Workbook_NewSheet(ByVal Sh As Object) ’処理したい内容をここに記述 End Sub
シートを挿入したらブックの最後に移動
1.新しいシートを挿入したら、常にブックの最後に移動する
引数Shを使えますから、
Sh.Move After:= Sheets(Sheets.Count)
直前の枚数をかぞえてその後ろに移動します。
シートを挿入したら名前を設定する
2. こんどは、シートに名前をつけるようにします。
名前は InputBox によりユーザーが入力することにします。シート名を格納するための変数temp宣言してつかいます。
Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim temp As String temp = InputBox("シート名を入力してください") Sh.Name = temp End Sub
3. 上記マクロで気をつけなければならないことは、入力ダイアログで未入力でOKをクリックしたり、キャンセルしたりすると、エラーが発生してしまいます。
しかし、エラーが発生しても処理をつづけ、正しい名前を入力するようにメッセージで促すことにした方が、良いでしょう。
最後に、On Error GoTo 0ステートメントを利用して、一度設定したプログラムのエラー処理を無効にしています。
Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim temp As String temp = InputBox("シート名を入力してください") On Error Resume Next Sh.Name = temp If Err.Number <> 0 Then MsgBox "シート名を正しく入力してください", vbExclamation Application.DisplayAlerts = False Sh.Delete Application.DisplayAlerts = True End If On Error GoTo 0 End Sub
4. 入力ダイアログで未入力でOKをクリックしたり、キャンセルしたりすると、エラーが発生。 そこでエラーでもメッセージを表示する。OKをクリックすると、シートが削除される。
シートを挿入したら名前を規則的に設定する
5. では例として、新しいシートを挿入したら、自動的にそのシートを一番後ろ右側に移動し、 前から並んでいるシートの順で、名前を規則的に設定するプロシージャを考えます。 そして、すでに何枚かシートがあるわけですから、そのシートの枚数を数えるための変数としてiをつかいます。 グラフシートは対象に入れないことにします。
Private Sub Workbook_NewSheet(ByVal Sh As Object) Dim i As Integer If TypeName(Sh) = "Worksheet" Then Sh.Move After:=Worksheets(Worksheets.Count) For i = 1 To Worksheets.Count Worksheets(i).Name = "令和3年" & _ Format(Now, "mm月") & "_" & Format(i, "00") Next i End If End Sub
6. 上記コードでは月だけをNow関数から取得しています。その後ろはシートの通し番号になっています。
7. シート名に月と日付を使いたい場合は
Format(Now, "mmdd") のようにすれば 0810のように日付が入り、後ろは通し番号となります。
8. 次回はWorkbook_SheetChangeについて紹介します。