vba - 在 VBA 中按用户定义的字段对 Outlook 任务进行排序
问题描述
我正在尝试按我称之为“Seq”的用户定义字段对我的任务进行排序。当我使用 VBA 执行此操作时,它似乎什么也没做。但是,当按默认字段(如 DueDate)进行排序时,这非常有效。有没有人有办法解决吗?我包括我的代码和结果。我正在使用 Outlook 2010。提前致谢!
这是代码:
Sub TestSort()
Dim ToDoFolder As Folder
Dim Task As TaskItem
Dim Sel As Outlook.Items
Dim InitStartTime As Date
Dim RemindTime As Date
Dim FilterString As String
'FORCE CHANGE CURRENT FOLDER TO BE "TO DO LIST" AND VIEW TO BE "Debug (Filter:TEST)"
Set ToDoFolder = Session.GetDefaultFolder(olFolderToDo)
Set Application.ActiveExplorer.CurrentFolder = ToDoFolder
ToDoFolder.Views.Item("Debug (Filter:TEST)").Apply
'AUTOMATICALLY SELECT TASK ITEMS TO BE WORKED WITH
FilterString = "@SQL=" & ToDoFolder.Views.Item("Debug (Filter:TEST)").Filter
Set Sel = ToDoFolder.Items.Restrict(FilterString)
'SHOW ORIGINAL SORTING
Debug.Print Chr(13); "Sort by Original"
Call CheckSort(Task, Sel)
'SORT TASKS IN MY SELECTION (AND CHECK SORT)
Sel.Sort "[Seq]", False
Debug.Print Chr(13); "Sort by Seq Ascending"
Call CheckSort(Task, Sel)
Sel.Sort "[Seq]", True
Debug.Print Chr(13); "Sort by Seq Descending"
Call CheckSort(Task, Sel)
Sel.Sort "[DueDate]", False
Debug.Print Chr(13); "Sort by DueDate Ascending"
Call CheckSort(Task, Sel)
Sel.Sort "[DueDate]", True
Debug.Print Chr(13); "Sort by DueDate Descending"
Call CheckSort(Task, Sel)
End Sub
Sub CheckSort(Task As Outlook.TaskItem, Sel As Outlook.Items)
'CHECK THAT IT WAS SORTED CORRECTLY
Debug.Print Chr(13);
For Each Task In Sel
Seq = Task.UserProperties.Find("Seq").Value
Debug.Print Seq & " " & Task.Subject & " " & Task.DueDate
Next Task
End Sub
结果如下:
Sort by Original
2 Test 1 6/6/2018
4 Test 2 6/8/2018
1 Test 3 6/10/2018
3 Test 4 6/9/2018
Sort by Seq Ascending
2 Test 1 6/6/2018
4 Test 2 6/8/2018
1 Test 3 6/10/2018
3 Test 4 6/9/2018
Sort by Seq Descending
2 Test 1 6/6/2018
4 Test 2 6/8/2018
1 Test 3 6/10/2018
3 Test 4 6/9/2018
Sort by DueDate Ascending
2 Test 1 6/6/2018
4 Test 2 6/8/2018
3 Test 4 6/9/2018
1 Test 3 6/10/2018
Sort by DueDate Descending
1 Test 3 6/10/2018
3 Test 4 6/9/2018
4 Test 2 6/8/2018
2 Test 1 6/6/2018
解决方案
谢谢你的评论,尼顿。
我已经解决了这个问题。我把它贴在这里,以防有人遇到同样的问题。
我不知道为什么,但是在使用 Items 对象时,排序不会与用户定义的字段一起使用。但是......我在使用 Table 对象时让它工作正常!:) 查看下面的新代码。
Sub TestSort()
Dim ToDoFolder As Folder
Dim Task As TaskItem
Dim Sel As Outlook.Table
Dim InitStartTime As Date
Dim RemindTime As Date
Dim FilterString As String
Dim oCol As Outlook.Column
'FORCE CHANGE CURRENT FOLDER TO BE "TO DO LIST" AND VIEW TO BE "Debug (Filter:TEST)"
Set ToDoFolder = Session.GetDefaultFolder(olFolderToDo)
Set Application.ActiveExplorer.CurrentFolder = ToDoFolder
ToDoFolder.Views.Item("Debug (Filter:TEST)").Apply
'AUTOMATICALLY SELECT TASK ITEMS TO BE WORKED WITH
FilterString = "@SQL=" & ToDoFolder.Views.Item("Debug (Filter:TEST)").Filter
Set Sel = ToDoFolder.GetTable(FilterString)
'CHECK DEFAULT COLUMNS
For i = 1 To Sel.Columns.Count
Set oColumn = Sel.Columns.Item(i)
Debug.Print oColumn.Name
Next i
'ADD COLUMN FOR USER-DEFINED FIELD "SEQ"
Sel.Columns.Add ("Seq")
'SHOW ORIGINAL SORTING
Debug.Print Chr(13); "Sort by Original"
Call CheckSortTable(Sel)
'SORT TASKS IN MY SELECTION (AND CHECK SORT)
Sel.Sort "[Seq]", False
Debug.Print Chr(13); "Sort by Seq Ascending"
Call CheckSortTable(Sel)
Sel.Sort "[Seq]", True
Debug.Print Chr(13); "Sort by Seq Descending"
Call CheckSortTable(Sel)
Sel.Sort "[DueDate]", False
Debug.Print Chr(13); "Sort by DueDate Ascending"
Call CheckSortTable(Sel)
Sel.Sort "[DueDate]", True
Debug.Print Chr(13); "Sort by DueDate Descending"
Call CheckSortTable(Sel)
End Sub
Sub CheckSortTable(oTable As Outlook.Table)
Dim Task As Outlook.Row
'CHECK THAT IT WAS SORTED CORRECTLY
Debug.Print Chr(13);
Do Until (oTable.EndOfTable)
Set Task = oTable.GetNextRow()
Seq = Task("Seq")
Debug.Print (Seq & " " & Task("Subject") & " " & Task("DueDate"))
Loop
End Sub
...和新的输出...
EntryID
Subject
CreationTime
LastModificationTime
MessageClass
DueDate
PercentComplete
IsRecurring
Sort by Original
2 Test_1 6/8/2018
4 Test_2 6/10/2018
1 Test_3 6/8/2018
3 Test_4 6/10/2018
Sort by Seq Ascending
1 Test_3 6/8/2018
2 Test_1 6/8/2018
3 Test_4 6/10/2018
4 Test_2 6/10/2018
Sort by Seq Descending
4 Test_2 6/10/2018
3 Test_4 6/10/2018
2 Test_1 6/8/2018
1 Test_3 6/8/2018
Sort by DueDate Ascending
2 Test_1 6/8/2018
1 Test_3 6/8/2018
4 Test_2 6/10/2018
3 Test_4 6/10/2018
Sort by DueDate Descending
4 Test_2 6/10/2018
3 Test_4 6/10/2018
2 Test_1 6/8/2018
1 Test_3 6/8/2018
推荐阅读
- java - Flyway Mutli Schema:如何在迁移脚本sql文件中指定模式名称
- python - 我在 python Beautiful Soup 中得到一个空列表
- highcharts - 如果 x 轴值太小,则内部的 X 范围图表标签不可见
- date - NestJS gRpc:为什么 Nestjs 将日期字符串转换为不同的格式?
- c# - 如何从 SQLite 中选择带小数秒的时间并在 C# 中插入到 SQL Server
- flutter - 指示器选项卡颤动
- javascript - 无法在 vue js 生产中播放视频(Vue Cli 3)
- javascript - 拆分数组并将值加在一起或根据jquery中的多项选择进行减法
- dart - 如何在 Dart 中测试两个持续时间是否大致相等
- javascript - 使用 Javascript 在表单字段中显示最近提交的数据