2014-04-18 31 views
0

在Outlook 2010中的「任務列表」中包含的所有任務項目,以及已標記的所有郵件。爲了規劃每個待辦事項需要多長時間,我已將內置的Outlook字段「Total Work」添加到此視圖(使用字段選擇器)。從Outlook VBA,我怎麼能訪問olTodo.TotalWork當olTodo.Class = olMail

我手動與多久,我想每一個待辦事項將採取「待辦事項清單」視圖更新「總工時」字段。

我想總量可達多少分鐘我所有的任務都需要。我試圖在VBA中做到這一點。我可以從oltodo.Class = olTask​​獲得olTodo.TotalWork,而不是olTodo.Class = olMail。

該錯誤消息我得到的是:運行時錯誤「438」:對象不支持此屬性或方法

據我所知,這個消息告訴我,olTodo不支持TOTALWORK屬性時oltodo.Class = olMail,但是,我知道Outlook有TotalWork數據,因爲我可以在Outlook的「待辦事項列表」視圖中查看和更新​​所有項目(包括olMail項目)的TotalWork。

所以,我的問題:我如何編程方式從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 

回答

1

您可以訪問使用MailItem.PropertyAccessor.GetProperty該屬性。使用OutlookSpy(單擊IMessage按鈕)計算出DASL屬性名稱。

+0

沒錯,就是工作。 Set oPA = olTodo.PropertyAccessor dur = oPA.GetProperty(「http://schemas.microsoft.com/mapi/id/{00062003-0000-0000-C000-000000000046}/81110003」) iMinuteCount = iMinuteCount + dur –

+0

Outlookspy是一個30天試用期的付費應用程序。這裏是展示另一種方式從Outlook中獲得DASL屬性名稱的鏈接:http://blogs.msdn.com/b/philliphoff/archive/2008/12/19/finding-dasl-property-names.aspx?重定向=真 –