在Microsoft Word宏中比较复合类型值的技术问题咨询
嘿,我来帮你搞定这个带年龄的有序人员列表需求!看你已经写了基础的类和宏代码,我帮你完善并修正问题~
第一步:完善你的CPersonName类模块
首先,你的类目前只有姓名属性,我们需要加上年龄字段,还可以加个方便的属性返回格式化全名:
Option Explicit Public LastName As String Public FirstName As String Public Age As Integer ' 新增年龄属性 ' 可选:返回格式化的全名,后续输出更方便 Public Property Get FullName() As String FullName = FirstName & " " & LastName End Property
第二步:修正并完成宏过程
你的原代码里有个拼写错误(CPersonNamne 应该是 CPersonName),这会直接导致编译失败。另外,System.Collections.SortedList 的键必须唯一,所以如果有年龄相同的人,直接用年龄当键会报错,我给你写了完整的实现,包括人员赋值、有序存储和文档输出:
Sub CreateSortedPersonList() Dim PersonA As CPersonName, PersonB As CPersonName, PersonC As CPersonName Dim PersonsWithData As Object Dim i As Integer ' 修正拼写错误:CPersonNamne → CPersonName Set PersonA = New CPersonName Set PersonB = New CPersonName Set PersonC = New CPersonName Set PersonsWithData = CreateObject("System.Collections.SortedList") ' 给每个人员赋值姓名和年龄 With PersonA .FirstName = "John" .LastName = "Doe" .Age = 32 End With With PersonB .FirstName = "Jane" .LastName = "Smith" .Age = 28 End With With PersonC .FirstName = "Bob" .LastName = "Brown" .Age = 32 End With ' 将人员添加到SortedList:用「年龄-全名」作为唯一键,确保排序且无冲突 ' 这样既会按年龄升序排列,年龄相同的会按全名排序 PersonsWithData.Add Key:=PersonA.Age & "-" & PersonA.FullName, Item:=PersonA PersonsWithData.Add Key:=PersonB.Age & "-" & PersonB.FullName, Item:=PersonB PersonsWithData.Add Key:=PersonC.Age & "-" & PersonC.FullName, Item:=PersonC ' 把有序列表输出到Word文档中 Selection.TypeText "有序人员列表(按年龄升序):" & vbCrLf & vbCrLf For i = 0 To PersonsWithData.Count - 1 Dim currentPerson As CPersonName Set currentPerson = PersonsWithData.GetByIndex(i) Selection.TypeText i + 1 & ". " & currentPerson.FullName & " - 年龄:" & currentPerson.Age & vbCrLf Next i ' 释放对象,避免内存泄漏 Set PersonsWithData = Nothing Set PersonA = Nothing Set PersonB = Nothing Set PersonC = Nothing End Sub
几个关键提示
- 一定要注意变量名拼写!你原代码里的
CPersonNamne多打了一个n,这是很容易犯的低级错误,会直接导致宏无法运行 SortedList默认会按键的字符串/数值顺序排序,如果你想按其他规则排序(比如按姓氏字母顺序),只需要把键换成PersonA.LastName & "-" & PersonA.FirstName即可- 如果你的人员数量很多,或者需要更灵活的排序逻辑,也可以考虑用
System.Collections.ArrayList,然后自定义排序规则,但SortedList对于简单的有序存储已经足够好用
内容的提问来源于stack exchange,提问作者Erik på kontoret
相关产品推荐
相关产品推荐

