77本目 はじめてのシート挿入イベント!

VBA100本ノック

VBA100本ノック 77本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ


問題

#VBA100本ノック77本目
シートが挿入された場合、その新規シートに対して以下の処理を行う。
・ブック内の最終シート(一番後ろ)に移動する
・シート名は当日の「yyyymmdd」とする
・既に同一シート名が存在する場合は挿入したシートは削除
※常に一番後ろにシートが挿入され当日の名前になる。

解答

Private Sub Workbook_NewSheet(ByVal Sh As Object)
    Dim sName As String
    sName = Format(Date, "yyyymmdd")
    On Error Resume Next
    Sh.Name = sName
    If Err.Number = 0 Then
        Sh.Move after:=Sheets(Sheets.Count)
        Exit Sub
    End If
    
    Application.DisplayAlerts = False
    Sh.Delete 'エラーだった場合…削除
    MsgBox "既に当日名のシートが存在します"
    
End Sub

■考え方・流れ
0:00 冒頭・問題確認
1:45 シート挿入イベントを使ってみる
4:21 シートの位置と名前を変更する
6:47 既にシートがある場合の分岐

新人君
新人君

大量のグラフを
手動で変更するのは
めんどくさいですもんね!

ブチョ
ブチョ

めんどくさがらずに
根性でやれバカモノ!

新人君
新人君

おいおい…

シート挿入イベントを使ってみる

さて!じゃあまずは…
シート挿入イベントの作成から!

開くのは…ブックモジュールだ!!

シートが挿入された時に実行…
そんなもん!!!Workbook_NewSheetイベントだ!!

挿入したシートを操作したければ、”Sh”を操作しよう!

ま、これは…
流れで分かるかな??www

シートの位置と名前を変更する

よし!そしたらお次!
お次は、挿入したシートの名前と位置を変更していくぞ!
まずはシートの名前から!!

今日の日付を入れて… ※Format(Date,”yyyymmdd”)
これを、Sh.Nameにぶっこんであげよう!

そうすると!!挿入したシートの名前が変わるぞ!!

続いては!!シートの位置を変えてあげよう!!
シートを移動させるためには、Worksheet.Moveメソッドを使えば良かったね!

これでシートが最後に移動するぞい!

既にシートがある場合の分岐

最後!!
すでに同名のシートがあった場合…
エラーになっちゃうから…そこの分岐を入れてあげよう!!

こういう場合は…
エラーハンドリング!!

もしエラーじゃ無ければ…
シートを最後尾にして…

エラーだった場合は…
シートを削除してあげればOK!!

終わりです!!お疲れさまでした!

ブチョ
ブチョ

この問題も簡単だったね!

新人君
新人君

お疲れさまでした!

あとがたり

おはこんばんちは。uぷ主です。
77本目、シート挿入イベントを使ってみる問題でした!!

ラッキーセブンですね!
uぷ主は今年も宝くじが当たらず…アンラッキーな正月からスタートしました。
皆さんいかがお過ごしでしょうか…

さて…今日の問題…シート挿入イベント。
あれ?何気に初だったのかお前…

たしかに…あんまりガンガン使うことはないけど…
実務では挿入した時のシートの位置をちょこっと変えたり、
別のプロシージャと組み合わせて使ったりはちょこちょこあったような…

縁の下の力持ちって感じのイベントさんで!!
たまーにたすかってます!
あざます!

あ~~~~~、


宝くじを買ったら全部当たるイベントとか作れたらな~

コメント

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