エクセルでシートがコピー(削除)されたことを判定する方法
エクセルで新規シートが作成された場合はNewSheetイベントで取得できますが、シートコピーまたはシート削除はイベントが用意されていません。
そのため、Workbook_SheetActivateイベントでシート数が増減したかを判定して処理を記述します。
【ソース】
各シートに処理を書くのではなく、WorkBookにVBAを記述するのがコツです。
‘ シート数を格納する変数(標準モジュールに書いても良い) Public cntSht As Integer ' WorkBook 起動時に初期シート数を格納 Private Sub Workbook_Open() cntSht = Me.Sheets.Count End Sub ' 各シートがアクティベート Private Sub Workbook_SheetActivate(ByVal Sh As Object) ' 追加された場合 If cntSht < Me.Sheets.Count Then '【処理記述欄】-------------------------------------------------------------- ' コピーによって追加されたシートが最初にアクティブ化される機能を利用しているため、 ' Shがコピーシートと判断できるので、 ' ここに処理を記述 '---------------------------------------------------------------------------- ' シート数を格納 cntSht = Me.Sheets.Count End If ' 削除された場合 If cntSht > Me.Sheets.Count Then '【処理記述欄】-------------------------------------------------------------- ' シートが削除された場合は、どのシートがアクティブになっているかActiveSheetで取得 '---------------------------------------------------------------------------- ' シート数を格納 cntSht = Me.Sheets.Count End If End Sub