我正在尝试在 Outlook VBA 中实现 IComparable.CompareTo 以使我能够对自定义类的 ArrayList 进行排序。我收到以下错误:
Compile Error: Procedure declaration does not match description of event or procedure having the same name.
这是我的类(class)(clsEmail)的缩短版本:
Option Explicit
Implements IComparable
Dim Sender As String
Dim Recipient As String
Function IComparable_CompareTo(ByVal obj As Object) As Integer
'To do add logic to compare Recipients
CompareTo = 0
End Function
我尝试了各种格式的函数声明,例如 IComparable_CompareTo(obj as Object) As Long 等,但均无济于事。
任何关于我做错了什么的指示。
最佳答案
与任何接口(interface)实现或事件提供程序一样,您应该使用代码 Pane 顶部的下拉菜单,以便 VBIDE 自动为您创建方法 stub ,而不是手动输入签名。
这是正确的签名:
Private Function IComparable_CompareTo(ByVal obj As Variant) As Long
End Function
与你的差异是由于.NET中的类型系统不同造成的; Long
是 32 位整数(VBA 的 Integer
是 16 位),而 Variant
能够包装任何 COM 不知道的内容(例如IUnknown
)。 VBA 中的对象
不是.NET 中的对象
。
关于VBA 无法实现 IComparable.CompareTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495184/