[英]Sorting Outlook tasks by user-defined field in VBA
我正在嘗試通過我稱為“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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.