VBAでインタフェースを実装する


VBAにはクラスの継承は存在しないがインターフェースを定義・実装することができる。

インターフェースを定義する

クラスモジュールにインターフェースを定義する

インターフェースを定義するにはクラスモジュールに定義したいプロパティまたはメソッドを記述する。 ここではMessageInterface.clsというクラスファイルを使用する

プロパティとメソッドを定義する

MessageInterface.clsに記載


'プロパティを定義する
 Public MessageMode As String

'空のメソッドを定義する
Public Sub Output(str)

End Sub

クラスでインターフェースを実装する

インターフェースを継承する

MessageInterfaceを継承したクラスとしてDebugPrintLogを作成する。 クラスモジュール内にimplentsキーワードを使用してMessageInterfaceインターフェースを継承する

'DebugPrintLog.cls

'Implementsキーワードの後に継承するインターフェース名を記載する
Implements MessageInterface

プロパティを実装する

インターフェースでプロパティを定義したならばGetterSetterでインターフェースで定義したプロパティの設定・取得を実装する必要がある

Public Property Get MessageInterface_MessageMode() As String

    MessageInterface_MessageMode = mode

End Property

Private Property Let MessageInterface_MessageMode(ByVal RHS As String)

    mode = RHS

End Property

メソッドを実装する

インターフェースで定義したメソッドを実装するためにはメソッド名がインターフェース名_メソッド名の形になる

'DebugPrintLog.clsファイル

'MessageInterfaceのOutput()を実装する
Public Sub MessageInterface_Output(str)

    Debug.Print "{ 型=> " & VarType(str) & ", 値=> " & str & " }"

End Sub

クライアント側での利用

インターフェースで定義したメソッドをクライアント側で呼び出すにはインターフェースで定義したメソッド名・プロパティ名で呼び出す

Public Sub Main()

    Dim log As MessageInterface
    Set log = New DebugPrintLog

    log.Output ("success")
    '出力:
    '{ 型=> 8, 値=> success }

End Sub

サンプルコード

'MessageInterface.clsファイル

Public MessageMode As String

Public Sub Output(str)

End Sub
'DebugPrintLog.clsファイル

Implements MessageInterface

Private mode As String

Public Property Get MessageInterface_MessageMode() As String

    MessageInterface_MessageMode = mode

End Property

Private Property Let MessageInterface_MessageMode(ByVal RHS As String)

    mode = RHS

End Property

Public Sub MessageInterface_Output(str)

    Debug.Print "{ 型=> " & VarType(str) _
        & ", 値=> " & str & " }"

End Sub

Private Sub Class_Initialize()

    mode = "DebugPrintMode"

End Sub
'Client.basファイル

Public Sub Main()

    Dim log As MessageInterface
    Set log = New DebugPrintLog

    log.Output ("success")

End Sub