VBA 无法实现 IComparable.CompareTo

标签 vba outlook

我正在尝试在 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 ,而不是手动输入签名。

VBIDE code pane dropdowns

这是正确的签名:

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/

相关文章:

vba - 如何获取发件人的电子邮件地址?

python - O365 EO 可恢复项目文件夹的 REST Api

vba - 使用当前打开的电子邮件

vba - 分析数组中的数据,删除,然后重新分析VBA

excel - 如何在不使用sendkeys的情况下登录网站?

vba - 尝试在设定的时间段内获取日历天数/工作日/周数

vba - 按类型过滤电子邮件附件文件

vba - 使用 VBA 访问 Outlook 中的文件夹

c# - Content-Transfer-Encoding 是 HTML header 吗?

vba - 如何使用 vba 将单元格值作为图表标题