使用 Outlook 任务
Outlook 确实有一项跟踪您必须要做的所有事情的内置机制;但出于某种原因,Outlook 任务从未使用过 Outlook 日历具有的这一方法。(例如,许多人自己安排约会,而不创建具有特定截止日期的任务。)人们为什么不利用 Outlook 任务呢?这个问题只有一个可能的答案:他们完全不知道编写 Outlook 任务脚本是多么容易。到现在为止。需要创建新任务吗?正好,这里有一个可以执行这类事情的脚本:Const olTaskItem = 3
Set objOutlook = CreateObject("Outlook.Application")
Set objTask = objOutlook.CreateItem(olTaskItem)
objTask.Subject = "Script Center Master Plan"
objTask.Body = "Final report for Script Center master plan."
objTask.ReminderSet = True
objTask.ReminderTime = #10/10/2005 12:00 PM#
objTask.DueDate = #10/11/2005 12:00 PM#
objTask.ReminderPlaySound = True
objTask.ReminderSoundFile = "C:\Windows\Media\Ding.wav"
objTask.Save
我们告诉过您它很容易。该脚本先定义一个名为 olTaskItem 的常量,并将其值设置为 3;我们稍后将使用此常量实际创建我们的任务。创建 Outlook.Application 对象的实例,然后使用下面这行代码来创建 TaskItem 对象的实例:Set objTask = objOutlook.CreateItem(olTaskItem)
没有在那方面做太多的设想:我们只是调用 CreateItem 方法,并传递常量 olTaskItem,以作为确保 Outlook 创建新任务的方法。
然后,我们将使用以下几行代码来为新任务配置属性值:objTask.Subject = "Script Center Master Plan"
objTask.Body = "Final report for Script Center master plan."
objTask.DueDate = #10/11/2005 12:00 PM#
objTask.ReminderSet = True
objTask.ReminderTime = #10/10/2005 12:00 PM#
objTask.ReminderPlaySound = True
objTask.ReminderSoundFile = "C:\Windows\Media\Ding.wav"
您不会很难理解这些属性的作用;我们主要是要创建一个名为 Script Center Master Plan 的任务,该任务需要在 2005 年 10 月 11 日中午之前完成。我们还为此任务设置了提醒;我们将正好提前 24 小时(2005 年 10 月 10 日中午)获得一个提醒,并伴有 Ding.wav 的悦耳声音。总而言之,相当简单。
注意。需要补充说明的是,这些属性并不是可以为任务配置的仅有属性。有关完整列表,请参阅 MSDN 上的 Microsoft Outlook VBA 语言参考。
这将在内存中给出一个新任务。要实际保存此任务并将其添加到 Outlook 任务中,需要调用 Save 方法:objTask.Save
非常容易。
但是,有些人看起来有些不解;毕竟,我们如何知道该任务已实际添加到了 Outlook 任务中?那么,我们可以始终运行一个如下的脚本,该脚本将返回包括所有 Outlook 任务的列表:Const olFolderTasks = 13
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderTasks)
Set colTasks = objFolder.Items
For Each objTask In colTasks
Wscript.Echo "Subject: " & objTask.Subject
Wscript.Echo "Date due: " & objTask.DueDate
Wscript.Echo "Percent complete: " & objTask.PercentComplete
Select Case objTask.Status
Case 0
Wscript.Echo "Status: Not started."
Case 1
Wscript.Echo "Status: In progress."
Case 2
Wscript.Echo "Status: Complete."
Case 3
Wscript.Echo "Status: Waiting."
Case 4
Wscript.Echo "Status: Deferred."
End Select
Select Case objTask.Importance
Case 0
Wscript.Echo "Importance: Low"
Case 1
Wscript.Echo "Importance: Normal"
Case 2
Wscript.Echo "Importance: High"
End Select
Wscript.Echo "Last modified: " & objTask.LastModificationTime
Next
另一个脚本非常简单,几乎不需要对其进行解释。此脚本先定义常量 olFolderTasks,并将其值设置为 13;我们将使用此常量来告诉 Outlook 从哪个文件夹中检索信息。创建 Outlook.Application 对象的实例,然后使用 GetNamespace 方法连接到 MAPI 命名空间。(如我们在以前专栏中所述,这是可连接的唯一命名空间。不过,您的脚本中仍必须包含此行代码。)为了连接到 Tasks 文件夹,我们调用 GetDefaultFolder 方法,并传递常量,告诉 Outlook 要访问的文件夹:Set objFolder = objNamespace.GetDefaultFolder(olFolderTasks)
完成连接后,仅使用一行代码即可检索 Tasks 文件夹中找到的所有项的集合:Set colTasks = objFolder.Items
在其中,我们设置一个 For Each 循环,完全遍历该集合,从而回显属性(例如 Subject、DateDue 和 PercentComplete)的值。您可能注意到了,我们未检索属性值 Body。这是因为检索 Body 属性会触发 Outlook 安全警报,将迫使我们对赋予脚本访问任务权限的消息框进行响应。忽略 Body 属性使我们可以避开安全警报,从而以无人参与方式运行脚本。
您可能还注意到了,在处理 Status 和 Importance 时,我们使用了 Select Case 语句。这是因为这两个属性都将值存储为整数;以 Status 为例,0 表示尚未启动任务,1 表示任务正在进行中等等。我们将不回显这些看起来毫无意义的整数值,而是使用 Select Case 分析值并返回一条相应的消息。例如,如果 Status 等于 2,将回显任务已经完成的事实:Case 2
Wscript.Echo "Status: Complete."
哈,很酷吧?
还可以使用筛选器来限制返回任务的类型;例如,您可能只希望返回活动任务(即尚未完成的任务)。以下正是可以执行此类事情的示例脚本:Const olFolderTasks = 13
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderTasks)
Set colItems = objFolder.Items
strFilter = " = FALSE"
Set colTasks = colItems.Restrict(strFilter)
For Each objTask In colTasks
Wscript.Echo "Subject: " & objTask.Subject
Wscript.Echo "Date due: " & objTask.DueDate
Wscript.Echo "Percent complete: " & objTask.PercentComplete
Select Case objTask.Status
Case 0
Wscript.Echo "Status: Not started."
Case 1
Wscript.Echo "Status: In progress."
Case 2
Wscript.Echo "Status: Complete."
Case 3
Wscript.Echo "Status: Waiting."
Case 4
Wscript.Echo "Status: Deferred."
End Select
Select Case objTask.Importance
Case 0
Wscript.Echo "Importance: Low"
Case 1
Wscript.Echo "Importance: Normal"
Case 2
Wscript.Echo "Importance: High"
End Select
Wscript.Echo "Last modified: " & objTask.LastModificationTime
Next
今天,我们不详细讨论筛选器;有关详细信息,请参阅以前的某个专栏中关于 Microsoft Outlook 的信息。不过,要指出的是,设置筛选器只需要两行代码,一行用于指定筛选器(在此例中,我们只对 Complete 属性等于 False 的任务感兴趣),另一行用于根据特定条件检索项的新集合:strFilter = " = FALSE"
Set colTasks = colItems.Restrict(strFilter)
然后,在 For Each 循环中遍历此新的、筛选过的集合,而非包含所有任务的原始集合。
当然,好戏还在后头。对于任务列表中确实不需要执行的内容,该怎么处理呢?只需删除该任务即可:Const olFolderTasks = 13
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objFolder = objNamespace.GetDefaultFolder(olFolderTasks)
Set colItems = objFolder.Items
strFilter = " = 'Script Center Master Plan'"
Set colTasks = colItems.Restrict(strFilter)
For Each objTask In colTasks
objTask.Delete
Next
正如您所看到的,此脚本与前面的脚本类似,后者将返回的数据限定为已完成的任务。在此例中,我们设置了一个筛选器,只返回主题为 Script Center Master Plan 的任务:strFilter = " = 'Script Center Master Plan'"
Set colTasks = colItems.Restrict(strFilter)
对于返回集合中的每个任务(假定任务主题是唯一的,尽管不一定非要如此),我们都将调用 Delete 方法,以从任务列表中删除该项:objTask.Delete
现在,您不必担心 Script Center Master Plan。您知道他们的意思是指什么:如果不在 Outlook 中,就真的不存在。
页:
[1]