シートが挿入されたときに実行する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について紹介します。
