2009-11-13 65 views
1

我最近切換到Outlook 2007,並注意到我的VBA宏不起作用。我使用下面的代碼來打開一個新的約會項目(並自動填充它)。它在Outlook 2003中完美工作,但現在objCB.Execute什麼都不做。我嘗試了不同的控制ID,它只適用於一些,但我無法弄清楚爲什麼或爲什麼不是所有。Outlook 2007 CommandBarControl.Execute將不起作用

Dim ex As Explorer 
Set ex = Application.ActiveExplorer 

If ex.CurrentFolder.DefaultItemType <> olAppointmentItem Then 
    Set ex = Nothing 
    Exit Sub 
End If 

Dim objCB As CommandBarButton 
Dim objAppt As AppointmentItem 

Set objCB = ex.CommandBars.FindControl(, 1106) 
If objCB Is Nothing Then Exit Sub 

objCB.Execute 

安全性設置爲最低級別。

+0

這工作得很好(我正在使用C#3/NET35/Outlook2007)。在執行過程中是否有錯誤*,或者是沒有找到的控件(並且在Execute之前存在這個控件)如預期的那樣? – 2009-11-13 20:16:20

+0

FindControl工作並返回正確的控件,但調用Execute方法不會產生任何結果。 – dwo 2009-11-13 23:13:02

回答

0

在Office 2007中,你會發現,不是每個控件ID將通過CommandBar.ExecuteMSO,運行儘管被列入公佈名單。我發現像Shape Galleries這樣的複雜控件將無法工作,但即使是一些更簡單的控件也沒有明顯的原因。

我已經解決此使用SendKey(內部VBA)或AutoIt的(當SendKey是不夠的),並經由選擇根據需要的擊鍵,有時鼠標點擊控制成功的工作。

+0

我正在用SendKeys嘗試它,但這會產生新的問題。新約會打開,但我無法獲得ActiveInspector.CurrentItem。 – dwo 2009-11-13 20:18:21

+0

約會打開後,如何顯式聲明約會對象並將其設置爲ActiveInspector.CurrentItem ?.這爲我工作: 次試驗(+) 昏暗聘任作爲AppointmentItem 設置聘任= Application.ActiveInspector.CurrentItem Debug.Print appt.Body 結束小組 – 2009-11-13 20:32:10

+0

這樣做,但參考什麼也不是。 – dwo 2009-11-13 23:14:04

0

這種反應是不是VBA,在我最近在一般這個問題的調查中,我沒有理由懷疑這是行不通的。我將這個答案作爲參考。請隨身攜帶或隨身攜帶。這是一個topic on the issue as outlookcode.com。

這工作得很好這裏(我使用C#3/NET35/NET4/Outlook2007)

指責OOM馬上就這個問題之前,我想首先要確保問題是真的確實與執行調用,而不是FindControl或其他程序流。另外請記住,這些CommandBars可能會受到使用和/或其他加載項的影響:手動查看樹(OutlookSpy或代碼)以清除任何疑問。另外,我不確定VB如何處理隱式強制類型轉換,就像賦值一樣。確保它沒有默默地吞嚥一個錯誤狀態。

// working C# as "proof" 
int NEW_APPOINTMENT_ID = 1106; 
var _button = commandBars.FindControl(Office.MsoControlType.msoControlButton, 
    NEW_APPOINTMENT_ID, null, false); 
try { 
    // button is of type Office.Core.CommandBarControl or null 
    if (_button != null) { 
    _button.Execute(); 
    }; 
} finally { 
    Util.ComRelease(ref _button); // My util, but you get the point 
} 

確保COM-釋放按鈕 - 就像項目,不依靠RCW手動照顧引用。這種方式很容易導致加載項崩潰。

+0

你的鏈接只是描述了完全相同的問題。 FindControl的作品,執行什麼都不做。但是這取決於你想要調用什麼控件:打印預覽或今日視圖工作! – dwo 2009-11-13 23:20:32