在Microsoft Word宏中,我尝试创建一个有序列表,其中包含一些附加到每个人的数据(例如年龄)。
我创建了一个名为CPersonName
的类模块,如下所示:
Option Explicit
Public LastName As String
Public FirstName As String
在Sub
(宏)中,我有以下代码:
Dim PersonA As CPersonNamne, PersonB As CPersonNamne, PersonsWithData As Object
Set PersonA = New CPersonNamne
Set PersonB = New CPersonNamne
Set PersonsWithData = CreateObject("System.Collections.SortedList")
PersonA.LastName = "Smith"
PersonA.FirstName = "Sven"
PersonB.LastName = "Miller"
PersonB.FirstName = "Tom"
PersonsWithData.Add PersonA, 77
PersonsWithData.Add PersonB, 18
但宏在最后一行失败(当试图将第二个人插入到排序列表中时)。 Microsoft Word抱怨无法比较2个元素。当然,程序必须将PersonA与PersonB进行比较,以了解哪一个应该在列表中的第一位。显而易见的方法是按元素比较它们。 (这意味着它应该比较姓氏,并且,如果姓氏相等,则比较拳头名。)但是如果Microsoft Word没有隐含地这样做,我将不得不定义运算符"<"对于CPersonName。怎么做的?
我有两个丑陋的选择:
这是可以做到的最好的 Microsoft Word?
答案 0 :(得分:1)
我过去了:
Age
添加为您班级的成员LastName
和FirstName
的组合作为key
如下
班级代码
Public LastName As String
Public FirstName As String
Public Age As Long
您的子代码
Option Explicit
Sub main()
Dim PersonA As CPersonName, PersonB As CPersonName
Set PersonA = New CPersonName
Set PersonB = New CPersonName
Dim PersonsWithData As Object
Set PersonsWithData = CreateObject("System.Collections.SortedList")
With PersonA
.LastName = "Smith"
.FirstName = "Sven"
.Age = 77
End With
With PersonB
.LastName = "Miller"
.FirstName = "Tom"
.Age = 18
End With
PersonsWithData.Add PersonA.LastName & PersonA.FirstName, PersonA
PersonsWithData.Add PersonB.LastName & PersonB.FirstName, PersonB
Dim i As Long
With PersonsWithData
For i = 0 To .Count - 1
Debug.Print .getkey(i), .GetByIndex(i).Age
Next
End With
End Sub
输出:
MillerTom 18
SmithSven 77