はじめに

クラスの設計で、プロパティプロシージャの定義をミスすると発生するエラーです。
クラスを使ったプログラムでは、ミスを発見しずらい事があります。今回は実際にエラーを再現させて原因を検証します。
サンプルプログラム(クラス)
以下は CTest というクラスになります。クラスモジュールで作成してください。
以下のクラスはプロパティプロシージャの定義が間違っています。(下線部分)
'クラス変数の定義
Private mColor As Long
Private mRange As range
'クラスの初期化
Private Sub Class_Initialize()
mColor = RGB(0, 0, 0)
End Sub
'プロパティプロシージャの定義
Property Let color(c As Long)
mColor = c
End Property
Property Get color()
color = mColor
End Property
Property Set Rng(r As range)
Set mRange = r
End Property
Property Get Rng() As range
Rng = mRange
End Property
'メソッドの定義
Public Sub setColor()
mRange.Interior.color = mColor
End Sub
標準モジュールでクラスを生成して検証してみましょう。
'このプロシージャは、標準モジュールに記述する。
Sub testClass()
Dim ct As CTest 'クラス変数の定義
Set ct = New CTest 'クラス生成
ct.color = RGB(255, 0, 0) 'プロパティ値セット
Set ct.Rng = Cells(1, 2) 'プロパティ値セット
ct.setColor 'メソッド
End Sub
実行すると、エラーと共に、クラスモジュールの該当する位置で停止します。


上記では、 Property Let color(c As Long) の部分で停止していますが、エラーとなっているのは、Property Get color() に戻り値の型指定が無い事が原因です。
Property Let color(c As Long)
mColor = c
End Property
Property Get color() As Long
color = mColor
End Property
上記のように As Long を付け加えればエラーは解消します。
エラーで指し示している部分と、エラーの箇所が異なっていますので、考え込んでしまう場合もあると思います。
(何を隠そう筆者がそうでした、、汗)
「同じプロパティに対するプロパティ プロシージャの定義が一致していません。」とのエラーが出た場合は、一つの原因として考えられますので参考にしてみてください。
コメント