【问题标题】:From Outlook VBA, how can I access olTodo.TotalWork when olTodo.Class=olMail从 Outlook VBA,当 olTodo.Class=olMail 时如何访问 olTodo.TotalWork
【发布时间】: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


    【解决方案1】:

    您可以使用 MailItem.PropertyAccessor.GetProperty 访问该属性。使用OutlookSpy(单击IMessage 按钮)找出DASL 属性名称。

    【讨论】:

    • 是的,这行得通。设置 oPA = olTodo.PropertyAccessor dur = oPA.GetProperty("schemas.microsoft.com/mapi/id{00062003-0000-0000-C000-000000000046}/81110003") iMinuteCount = iMinuteCount + dur
    • Outlookspy 是一个有 30 天试用期的付费应用程序。这是一个链接,它显示了从 Outlook 中获取 DASL 属性名称的另一种方法:blogs.msdn.com/b/philliphoff/archive/2008/12/19/…
    猜你喜欢
    • 2023-03-20
    • 2010-10-14
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2017-11-17
    相关资源
    最近更新 更多