カテゴリー
Microsoft

【Excel VBA】クラスの雛形

VBA クラスの雛形のポイント

  • mstrClassName はログ出力用にすべてのクラスに付けている。
  • コメントは、C# のドキュメントコメントに倣っている。正しいかどうかは不明
  • クラス名を、TypeName(Me) で取得し、コンストラクタでプロパティにセットしている。
  • 完全コンストラクタを意識する場合、セッターは使用しないが書いておく。
  • コンストラクタに引数を持たせることができないため、Init という名前の関数をコンストラクタの代わりとして使う。

VBA クラスの雛形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
''' <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 を触っていて、戸惑うことが多いです><。少しでも楽にしようと、コピペで済ませられるクラスの雛形を作ってみました。

それにあたり、次のページが参考になりました。ありがとう存じます!

以上です。

コメントを残す