No existe una forma de crear -explícitamente- una interfaz, pero se puede hacer creando un módulo de clase con los prototipos de las funciones y eventos estableciendolo como PublicNotCreatable, y luego implementarlo utilizando la palabra clave Implements:
'
' Modulo de clase: MyInterface.cls
'
Option Explicit
Sub Foo()
End Sub
Function Something(ByVal Arg As String)
End Function
'
' Modulo de clase: MyClass.cls
'
Option Explicit
Implements MyInterface
Property Get ClassName()
ClassName = "Test Class"
End Property
Private Sub MyInterface_Foo()
Debug.Print "Foo called from MyClass"
End Sub
Private Function MyInterface_Something(ByVal Arg As String) As Variant
Debug.Print "Something from MyClass like: " & Arg
End Function
'
' Módulo estándar Test.bas
'
Option Explicit
Sub Test()
Dim csInterface As MyInterface
Dim csClass As New MyClass
Debug.Print csClass.ClassName
Set csInterface = csClass
Call csInterface.Something("Hola Mundo")
End Sub
Fijate que cuando se ejecute Test, lo que va a estar llamando es a la función implementada en MyClass, por lo que el output sería algo así:
Test Class
Something from MyClass like: Hola Mundo
Bytez.