2012-06-29 75 views
0

我想更改Outlook 2010日曆中所有項目的時區。For Each to遍歷Outlook日曆項目列表

我很困惑,因爲它們在循環中迭代時如何處理集合中的項目。我的主要背景是用Java編寫的,正如我所瞭解的循環中那樣,一個變量被用作一個虛擬變量,它將依次取得集合中所有項目的值。這種FOR循環通常不需要特殊的賦值。你需要以某種方式手動推進變量,以保持循環進行?

這裏是我的代碼:

Public Sub TZFix() 

    Dim oAppointmentItem As Outlook.AppointmentItem 
    Dim tzs As Outlook.TimeZones 
    Dim tzCentral As Outlook.TimeZone 
    Dim oAppointments As Object 
    Dim oNS As Outlook.NameSpace 

    Set oNS = oOutlook.GetNamespace("MAPI") 
    Set oAppointments = oNS.GetDefaultFolder(olFolderCalendar) 
    Set tzs = Application.TimeZones 
    Set tzCentral = tzs("Central Standard Time") 

    For Each oAppointmentItem In oAppointments.Items 
     Set oAppointmentItem.StartTimeZone = tzCentral 
     Set oAppointmentItem.EndTimeZone = tzCentral 
    Next 

End Sub 

我認爲,與循環中變量賦值的問題,因爲我每當我運行它得到一個Error 91: Object Variable or With block variable not set錯誤。

+0

刪除線'昏暗oOutlook作爲Outlook.Application'和改線'設置ONS = oOutlook.GetNamespace( 「MAPI」)''來設置ONS = Outlook.GetNamespace( 「MAPI」 )',它會很好地工作。 –

+0

@SiddharthRout:我剛剛嘗試過您的解決方案,但不幸的是我仍然收到相同的錯誤。我正在繼續研究這個問題,請讓我知道你是否碰巧找到別的東西。謝謝! – flyingscotsman74656

回答

0

oOutlook永遠不會被分配到,因此也是Nothing。您可能打算將其設置爲Application

此外,最後將局部變量設置爲Nothing是多餘的,請將其刪除。

+0

啊,我曾經在某處讀過,有必要釋放變量並幫助垃圾收集。我覺得奇怪的是,這樣的高級語言會困擾這樣的事情,但沒有想太多。 – flyingscotsman74656

+0

只是再次運行它,得到一個「運行時錯誤」440'屬性是隻讀的「錯誤。這是因爲Outlook鎖定了預約的時區屬性嗎?有沒有辦法獲得寫入權限?我所有的數據都存儲在一個.ost文件中。 – flyingscotsman74656

+0

@ flyingscotsman74656我沒有安裝Outlook。請使用調試器。 「F8」進入,「Shift + F8」進入。 'F9'設置了一個斷點。請參閱http://stackoverflow.com/a/336784/11683瞭解如何配置錯誤報告。 'F2'調出對象瀏覽器,從中可以看到屬性是否只讀。 'Shift + F2'調出對象瀏覽器並跳轉到您的代碼模塊中當前插入符的屬性/方法。 – GSerg

0

我的腳本中也有這個問題。對我來說,解決方案是將宏安全設置設置爲最低,然後再次運行,並且工作正常。 也許值得一試!

0

我使用代碼進行了少量更改的代碼。這是工作:

Public Sub TZ_change_to_Hawaii() 
''''Changing the selected appointments' time zones to Hawaii 

Dim tzs As Outlook.TimeZones 
Dim tzCentral As Outlook.TimeZone 

Set tzs = Application.TimeZones 
Set tzCentral = tzs("Hawaiian Standard Time") 

Dim objOL As Outlook.Application 
Dim objSelection As Outlook.Selection 
Dim objItem As Object 

Set objOL = Outlook.Application 
Set objSelection = objOL.ActiveExplorer.Selection 

For Each objItem In objSelection 
    Set objItem.StartTimeZone = tzCentral 
    Set objItem.EndTimeZone = tzCentral 
    objItem.Save 
Next 
End Sub