首页 > 解决方案 > 对象模块需要为接口'~'实现'~'

问题描述

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

这是每当我单击表单上的控件时出现的错误:

错误消息

这是我的界面:

交易记录

Option Compare Database
Option Explicit

Public Property Get TRANSACTION_DATE() As Date
End Property

这是我的课程:

账簿记录

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

传输记录

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

我做错了什么?

标签: ms-accessvba

解决方案


Public Property Get TRANSACTION_DATE() As Date
End Property

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

Private Property Get ITransactionRecord_TRANSACTION_DATE() As Date

VBA 对这两个下划线感到困惑,它只期待一个;在 VBA 中,实现接口成员(或处理事件源的事件)的成员将是一个名为的私有方法[Source]_[MemberName]_下划线字符在接口成员的签名中具有句法含义,如果有的话,应该小心使用,至少在任何表示由其他人实现的类。

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

Public Property Get TransactionDate() As Date
End Property
Private Property Get ITransactionRecord_TransactionDate() As Date

推荐阅读