VBA クラスの雛形のポイント
- mstrClassName はログ出力用にすべてのクラスに付けている。
- コメントは、C# のドキュメントコメントに倣っている。正しいかどうかは不明
- クラス名を、
TypeName(Me)で取得し、コンストラクタでプロパティにセットしている。 - 完全コンストラクタを意識する場合、セッターは使用しないが書いておく。
- コンストラクタに引数を持たせることができないため、Init という名前の関数をコンストラクタの代わりとして使う。
VBA クラスの雛形
''' <summary>
''' 雛形
''' </summary>
Option Explicit
Private mstrClassName As String
Private mobjTargetWorksheet As Worksheet
''' <summary>
''' ゲッター : 操作対象ワークシート
''' </summary>
''' <returns>操作対象ワークシート</returns>
Public Property Get TargetWorksheet() As Worksheet
' TODO オブジェクトの場合、Set を付け忘れてエラーとなりがちなので注意!
Set TargetWorksheet = mobjTargetWorksheet
End Property
''' <summary>
''' セッター : 操作対象ワークシート
''' </summary>
''' <param name="objTargetWorksheet">操作対象ワークシート</param>
Public Property Let TargetWorksheet(objTargetWorksheet As Worksheet)
Set mobjTargetWorksheet = objTargetWorksheet
End Property
''' <summary>
''' コンストラクタ
''' </summary>
Private Sub Class_Initialize()
mstrClassName = TypeName(Me)
Debug.Print (mstrClassName & " : Constructor is called.")
End Sub
''' <summary>
''' デストラクタ
''' </summary>
Private Sub Class_Terminate()
Debug.Print (mstrClassName & " : Destructor is called.")
End Sub
''' <summary>
''' 初期化処理を実行します。
''' </summary>
''' <param name="objTargetWorksheet">操作対象ワークシート</param>
Public Sub Init(ByVal objTargetWorksheet As Worksheet)
Debug.Print (mstrClassName & " : Init")
' 変数をセット
mobjTargetWorksheet = objTargetWorksheet
End Sub
おわりに
VBA を触っていて、戸惑うことが多いです><。少しでも楽にしようと、コピペで済ませられるクラスの雛形を作ってみました。
それにあたり、次のページが参考になりました。ありがとう存じます!
以上です。
