これに取り組むもう1つの方法は、すべてのコードをワークシートに含めないようにすることです。その後、何も削除する必要はありません。ワークシートのコードモジュールはイベントをコーディングするのに便利な場所ですが、イベントを処理するための独自のクラスモジュールを作成することもできます。これを標準モジュールに入れます。
Public gclsEvent As CEvent
Sub Auto_Open()
Set gclsEvent = New CEvent
Set gclsEvent.This = Sheet1
End Sub
これにより、グローバルなCEventのインスタンスが作成されるため、ブックが開いている限りスコープが失われることはありません。コードネームSheet1のワークシートをクラスのThisプロパティに割り当てます。このコードでCEventという名前のクラスモジュールを作成します
Private WithEvents mwsThis As Worksheet
Public Property Set This(ByVal wsThis As Worksheet): Set mwsThis = wsThis: End Property
Public Property Get This() As Worksheet: Set This = mwsThis: End Property
Private Sub mwsThis_Activate()
Me.This.Copy , Me.This.Parent.Sheets(Me.This.Parent.Sheets.Count)
End Sub
WithEventsキーワードは、そのオブジェクトのイベントを公開します。Sheet1のイベントのみをフックしているため、別のシートをアクティブ化してもコードはトリガーされません。