2010-06-09 40 views
1

當Excel工作表或圖表嵌入到Word或Powerpoint中時,這是一個非常常見的問題。我在Word和Powerpoint中都看到了這個問題,看起來就是連接到Excel的COM插件。 COM插件是用C#(.NET)編寫的。查看附件中的錯誤對話框。將Excel圖表對象嵌入到PowerPoint中時,PowerPoint將顯示「無法啓動應用程序」錯誤

我調試了插件,發現了一個非常奇怪的行爲。 COM插件中的OnConnection(...),OnDisConnection(...)等方法正常工作,直到向代碼添加事件處理程序。即處理Worksheet_SheetChange,SelectionChange或Excel中可用的任何類似事件。只要我添加一個單獨的事件處理程序(儘管我的代碼有幾個),Word和Powerpoint開始抱怨並且不激活嵌入對象。

在互聯網上的一些帖子上,人們被要求刪除辦公室的反病毒插件(在我的情況下是無的),所以這讓我相信這個問題與COM加載項有些相關,主機應用程序激活對象。

有沒有人知道這裏發生了什麼? PowerPoint Error http://www.freeimagehosting.net/uploads/d687736c66.png

Word Error http://www.freeimagehosting.net/uploads/f72b99bc25.png

修訂版6月21日 - 2010


發現,當嵌入對象被激活的事件和變化ComAddIns收集產生問題。我現在使用Excel :: Application :: UserControl屬性來檢查Excel是否處於嵌入狀態,然後跳過任何OnConnection(...)和OnDisconnection(...)代碼。

事件問題的一個解決方案可能是將所有應用程序級別的事件移動到VBA代碼並調用.NET。從而從.NET代碼中刪除所有事件處理程序。

可能有更多的情況下嵌入對象可能無法初始化,所以我選擇禁用COM插件,即完全跳過OnConnection(...)和OnDisconnection(...)方法中的代碼。

回答

0

這裏是我做了什麼來擺脫這惱人的問題:

  1. 刪除所有事件處理程序的.NET代碼,並依靠VBA應用程序事件,即代替處理Excel中::應用:: Worksheet_Activate(...)事件,在VBA模塊中處理它們,並在收到事件時調用插件。 NET事件處理程序似乎以某種方式破壞了狀態。

  2. 使用自定義參數中的標誌,禁用任何與OnConnection(...)中的插件交互的代碼。查看該標誌下面的鏈接瞭解詳細信息: COM AddIns in Detail

我提到有關Excel ::應用::控件屬性,但它不是在某些情況下,可靠。我們需要考慮下列情況和自定義陣列參數是在OnConnection(...)是最可靠的:

  1. Excel中開始作爲獨立的應用
  2. Excel中一些其他的應用程序啓動嵌入式應用
  3. Excel通過自動化開始,例如的CreateObject(...)

當Excel處於嵌入模式時,我首選禁用插件。這取決於您在OnConnection中執行的代碼(...)以及其他應用程序在執行時如何響應。爲了解決這個問題,必須實施點#1。

如果有人有更好的解決方案,請讓我知道:)

相關問題