所以我尝试将这些问题作为指导:
这是我在单击表单上的控件时遇到的错误:
这是我的界面:
交易记录
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)
我做错了什么?
Run Code Online (Sandbox Code Playgroud)Public Property Get TRANSACTION_DATE() As Date End Property
VBA 中的公共接口成员名称中不能有下划线,因为这样会得到:
Run Code Online (Sandbox Code Playgroud)Private Property Get ITransactionRecord_TRANSACTION_DATE() As Date
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)