6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?