[VBA,VB.NET,C#,PHP]プログラムTips集

[VBA,VB.NET,C#,PHP]プログラムのちょっとしたテクニック

エクセルでシートがコピー(削除)されたことを判定する方法

エクセルで新規シートが作成された場合は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