「同じプロパティに対するプロパティプロシージャの定義が一致していません。」

エラー

はじめに

 クラスの設計で、プロパティプロシージャの定義をミスすると発生するエラーです。
クラスを使ったプログラムでは、ミスを発見しずらい事があります。今回は実際にエラーを再現させて原因を検証します。

サンプルプログラム(クラス)

 以下は 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 を付け加えればエラーは解消します。
エラーで指し示している部分と、エラーの箇所が異なっていますので、考え込んでしまう場合もあると思います。
(何を隠そう筆者がそうでした、、汗)

 「同じプロパティに対するプロパティ プロシージャの定義が一致していません。」とのエラーが出た場合は、一つの原因として考えられますので参考にしてみてください。

コメント

タイトルとURLをコピーしました