April 18, 2014

Excel VBA にはThisworksheetがない?でもActiveSheetとMeがある!

ThisWorkbook、ActiveWorkbook、ActiveSheetはあるのですが、ThisWorksheetはありません。
実際には、標準モジュールでコーディングする場合は、Activesheetで必要な処理ができてしまいます。
以下のコードを実行すると、ActiveSheetの中身を確認できます。
どうしてもThisWorksheetと書きたい場合や、他のシートをアクティブにするVBAの場合はSetステートメントでThisWorksheetにActiveSheetを保存しておきます。

次のサンプルでは、別のシートをアクティブにした場合の結果を示します。
Sub testActiveSheet
   Set ThisWorksheet = ActiveSheet
   Msgbox "ActiveSheet is " & ActiveSheet.Name
   Msgbox "ThisWorksheet is " & ThisWorksheet.Name

   ActiveSheet.Next.Activate

   Msgbox "ActiveSheet is " & ActiveSheet.Name
   Msgbox "ThisWorksheet is " & ThisWorksheet.Name
End Sub
シートにコードを書く場合は、Meキーワードを使うこともできます。Meキーワードはコードが実行されているモジュールそのものを示しているので、以下のコードをSheet2から呼び出した場合でもMe.NameはSheet1のままです(コードがSheet1に書いてあるとすれば)。

 なお、Meキーワードはクラスモジュールでしか使えないので、標準モジュールで使うとエラーとなります。
Sub testMe
   Set ThisWorksheet = ActiveSheet
   Msgbox "ActiveSheet is " & ActiveSheet.Name
   Msgbox "ThisWorksheet is " & ThisWorksheet.Name

   Msgbox "Me is " & Me.Name

   ActiveSheet.Next.Activate

   Msgbox "ActiveSheet is " & ActiveSheet.Name
   Msgbox "ThisWorksheet is " & ThisWorksheet.Name

   Msgbox "Me is " & Me.Name
End Sub 

No comments :

Post a Comment