【发布时间】:2014-06-03 00:56:49
【问题描述】:
在 Outlook 2010 中,“待办事项列表”包含所有任务项以及所有已标记的邮件项。为了计划每个待办事项需要多长时间,我在此视图中添加了内置的 Outlook 字段“总工作量”(使用字段选择器)。
我手动更新“待办事项列表”视图中的“总工作量”字段,显示我认为每个待办事项需要多长时间。
我想计算我的所有任务需要多少分钟。我正在尝试在 VBA 中执行此操作。我能够从 olTodo.Class= olTask 的待办事项中获取 olTodo.TotalWork,但当 olTodo.Class = olMail 时却不能。
我得到的错误信息是:运行时错误“438”:对象不支持此属性或方法
我了解此消息告诉我当 oltodo.Class = olMail 时 olTodo 不支持 TotalWork 属性,但是,我知道 Outlook 具有 TotalWork 数据,因为我可以查看和更新所有项目(包括 olMail 项目)的 TotalWork ) 从 Outlook 中的“待办事项列表”视图。
那么,我的问题是:如何以编程方式从 VBA 访问该数据?
这是我的代码:
Sub CountMinutesNeeded()
Dim olApp As Outlook.Application
Dim olNs As NameSpace
Dim Fldr As MAPIFolder
Dim olTodo As Object
Dim iMinuteCount As Long ' Minutes needed to complete to-do's
Dim olItms As Outlook.Items
Set olApp = New Outlook.Application
Set olNs = olApp.GetNamespace("MAPI")
Set Fldr = olNs.GetDefaultFolder(olFolderToDo)
Set olItms = Fldr.Items
For Each olTodo In olItms
If olTodo.Class = olTask Then
' Only look at uncompleted tasks with a due date <= today OR Null
If (olTodo.DueDate <= Date Or olTodo.DueDate = #1/1/4501#) And olTodo.Complete = False Then
iMinuteCount = iMinuteCount + olTodo.TotalWork
End If
Else
If olTodo.Class = olMail Then
' Only interested in uncompleted items due today or earlier, or without due date
If (olTodo.TaskDueDate <= Date Or olTodo.TaskDueDate = #1/1/4501#) And olTodo.TaskCompletedDate = "1/1/4501" Then
' !!! This code does not work. I am unable to access olTodo.TotalWork when olTodo.class = olMail,
' Run-time error '438': Object doesn't support this property or method
'iMinuteCount = iMinuteCount + olTodo.TotalWork
' Instead, we'll assume 15 minutes
iMinuteCount = iMinuteCount + 15
End If
End If
End If
Next olTodo
MsgBox "Total Minutes Needed = " & iMinuteCount
End Sub
【问题讨论】:
标签: vba outlook outlook-2010