对象模块需要为接口'~'实现'~'

jcr*_*izk 3 ms-access vba

所以我尝试将这些问题作为指导:

这是我在单击表单上的控件时遇到的错误:

错误消息

这是我的界面:

交易记录

Option Compare Database
Option Explicit

Public Property Get TRANSACTION_DATE() As Date
End Property
Run Code Online (Sandbox Code Playgroud)

这是我的课程:

账本记录

Option Compare Database
Option Explicit

Implements ITransactionRecord

'from interface
Private tTRANSACTION_DATE As Date

Private Property Get ITransactionRecord_TRANSACTION_DATE() As Date
    ITransactionRecord_TRANSACTION_DATE = TRANSACTION_DATE
End Property

Public Property Get TRANSACTION_DATE() As Date
    TRANSACTION_DATE = tTRANSACTION_DATE
End Property

Public Property Let TRANSACTION_DATE(ByVal newTRANSACTION_DATE As Date)
    tTRANSACTION_DATE = CDate(Format((newTRANSACTION_DATE), "m / d / yyyy"))
End Property
Run Code Online (Sandbox Code Playgroud)

传输记录

Option Compare Database
Option Explicit

Implements ITransactionRecord

'from interface
Private tTRANSACTION_DATE As Date

Private Property Get ITransactionRecord_TRANSACTION_DATE() As Date
    ITransactionRecord_TRANSACTION_DATE = TRANSACTION_DATE
End Property

Public Property Get TRANSACTION_DATE() As Date
    TRANSACTION_DATE = tTRANSACTION_DATE
End Property

Public Property Let TRANSACTION_DATE(ByVal newTRANSACTION_DATE As Date)
    tTRANSACTION_DATE = CDate(Format((newTRANSACTION_DATE), "m / d / yyyy"))
End Property
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Mat*_*don 5

Public Property Get TRANSACTION_DATE() As Date
End Property
Run Code Online (Sandbox Code Playgroud)

VBA 中的公共接口成员名称中不能有下划线,因为这样会得到:

Private Property Get ITransactionRecord_TRANSACTION_DATE() As Date
Run Code Online (Sandbox Code Playgroud)

VBA 与两个下划线混淆,它只需要一个;在 VBA 中,实现接口成员(或处理事件源的事件)的成员将是一个名为 的私有方法[Source]_[MemberName]_下划线字符在接口成员的签名中具有句法含义,如果有的话,至少在任何情况下都应谨慎使用类,意味着由其他人实现。

将您的属性重命名为PascalCase TransactionDate,问题就消失了:

Public Property Get TransactionDate() As Date
End Property
Run Code Online (Sandbox Code Playgroud)
Private Property Get ITransactionRecord_TransactionDate() As Date
Run Code Online (Sandbox Code Playgroud)