共用方式為


針對 Office 解決方案中的問題進行疑難解答

適用於: Visual Studio

本文介紹如何在Visual Studio中開發 Office 解決方案時,針對您在執行不同工作時可能會遇到的問題進行疑難解答。

建立、升級和開啟項目時的問題

當您建立或開啟 Office 專案時,可能會遇到下列問題。

問題 1:無法建立專案

如果您嘗試建立或開啟 Office 專案時發生錯誤,但 Visual Studio 沒有足夠的資訊來判斷原因,請嘗試關閉專案、結束 Visual Studio,然後重新開始。

如果您嘗試建立檔層級專案,有可能在 Excel 或 Word 中開啟與新項目中檔同名的另一份檔。 請確定所有其他 Excel 或 Word 執行個體都已關閉。

問題 2:當您根據現有項目的檔建立新專案時,控件屬性會遺失

如果您根據現有項目的檔建立新的 Office 專案,則檔上任何控件的屬性都不會複製到新專案中。 手動重設任何既有控件的屬性。 或者,您也可以建立現有專案的複本而不建立新專案,或將現有專案載入新方案中 (在設計工具中),然後從現有文件複製控制項並貼到新文件中,藉此保留控制項屬性。

問題 3:根據現有活頁簿建立 Excel 活頁簿項目時發生錯誤

如果您根據現有的活頁簿建立新的 Excel 活頁簿專案,您可能會看到下列錯誤的組合。

  • 來自 Excel:「隱私權警告:此文件包含巨集、ActiveX 控制項、XML 擴充套件資訊或 Web 元件。 這些可能包含無法經由 [文件檢查] 移除的私人資訊。」
  • 來自 Visual Studio:「無法正確載入設計工具。」

當您嘗試建立的專案是以已使用 [文件檢查] 移除其個人資訊的活頁簿為基礎時,可能會發生這些錯誤。 若要避免此問題,請先執行下列步驟,再建立專案:

  1. 在 Excel 中開啟該活頁簿。
  2. 在 Excel 中開啟 [信任中心]。
  3. 在 [ 隱私權選項] 索引 標籤上,清除 [ 儲存時 從檔案屬性移除個人資訊] 複選框。
  4. 儲存活頁簿並關閉 Excel。

問題 4:移轉后無法開啟專案

將 Office 方案移轉至 Microsoft Office 2010 之後,專案就無法在僅安裝 2007 Microsoft Office 系統的開發電腦上開啟。 您可能會看到下列錯誤。

  • 「方案中的一個或多個專案未正確載入。 如需詳細資訊,請參閱 [輸出] 視窗。」
  • 「無法建立專案,因為這部電腦上未安裝與這種專案類型關聯的應用程式。 您必須安裝與這種專案類型關聯的 Microsoft Office 應用程式。」

若要解決此問題,請編輯 .vbproj.csproj 檔案。 針對 Word 專案,將 取代 HostPackage="{763FDC83-64E5-4651-AC9B-28C4FEB985A1}"HostPackage="{6CE98B71-D55A-4305-87A8-0D6E368D9600}"。 針對 Excel 專案,將 取代 HostPackage="{B284B16A-C42C-4438-BDCD-B72F4AC43CFB}"HostPackage="{825100CF-0BA7-47EA-A084-DCF3308DAF74}"。 針對 Outlook 專案,將 取代 HostPackage="{D2B20FF5-A6E5-47E1-90E8-463C6860CB05}"HostPackage="{20A848B8-E01F-4801-962E-25DB0FF57389}"

或者,請務必確定只在已安裝 Microsoft Office 2010 的開發電腦上開啟移轉的專案。

問題 5:升級的 Office 2003 檔層級專案包含 Windows Forms 控件的錯誤

如果您升級Microsoft Office 2003 檔層級專案,而且檔包含 Windows Forms 控件,則升級的專案可能會有編譯或運行時間錯誤。 若要避免這個問題,請先在開發電腦上安裝 Visual Studio 2005 Tools for Office Second Edition Runtime,再將專案升級。 您可以從下列 Microsoft 下載中心,取得這個執行階段版本的可轉散發套件: Microsoft Visual Studio 2005 Tools for Office Second Edition Runtime (VSTO 2005 SE) (x86)。

升級項目之後,如果任何其他 Office 方案未使用 Visual Studio 2005 Tools for Office Second Edition Runtime,您可以從開發計算機卸載它。

當您使用設計工具時發生問題

當您在檔層級專案中使用檔、活頁簿或工作表設計工具時,可能會遇到下列問題。

問題 1:設計工具無法正確載入

在下列情況下,Visual Studio 無法開啟設計工具:

  • Excel 或 Word 已開啟並且正在顯示強制回應對話方塊。 若要開啟設計工具,請查看 Excel 或 Word 是否開啟強制回應對話方塊,並且關閉任何開啟的強制回應對話方塊。 如果沒有開啟任何強制回應對話方塊,則可能需要執行其他動作,Excel 或 Word 才會回應。
  • 專案目前正在偵錯。 若要開啟設計工具,請停止或完成偵錯。
  • Excel 啟動時,開發電腦上安裝的 Excel VSTO 增益集正在顯示對話方塊。 若要建立 Excel 文件層級專案,您必須先停用 VSTO 增益集。

問題 2:控制件在檔或工作表上顯示為黑色矩形

如果您將文件或工作表上的控制項設為群組,Visual Studio 就不再能夠辨認此控制項。 無法在 [ 屬性 ] 視窗中存取群元件,而且它們會顯示為檔或工作表上的黑色矩形。 您必須將這些控制項取消群組才能還原其功能。

問題 3:Visual Studio 中看不到 Word 範本上的控件

如果您在 Visual Studio 設計工具中開啟 Word 範本,則可能不會顯示不符合文字之範本上的控制件。 這是因為 Visual Studio 會在 [一般] 檢視中開啟 Word 範本。 若要檢視控件,請選取 [檢視 ] 功能表,指向 [Microsoft Office Word 檢視 ],然後選取 [ 列印版面配置]。

問題 4:在 Visual Studio 設計工具中插入美工圖案命令不會執行任何動作

在 Visual Studio 設計工具中開啟 Excel 或 Word 時,按兩下功能區 [圖例] 索引標籤上的 [美工圖案] 按鈕並不會開啟美工圖案工作窗格。 若要新增美工圖案,您必須在 Visual Studio 外部開啟主要項目資料夾中的活頁簿或文件復本(不是 \bin 資料夾中的復本,請新增美工圖案,然後儲存活頁簿或檔。

撰寫程式代碼時發生問題

當您在 Office 專案中撰寫程式代碼時,可能會遇到下列問題。

問題 1:使用 C 時無法存取 Office 物件的某些事件#

在某些情況下,當您嘗試在 Visual C# 專案中存取某個 Office 主要 Interop 組件 (PIA) 類型執行個體的特定事件時,可能會看到編譯器錯誤。

'Microsoft.Office.Interop.Excel._Application.NewWorkbook' 與 'Microsoft.Office.Interop.Excel.AppEvents_Event.NewWorkbook' 之間的模棱兩可

此錯誤表示您嘗試存取與物件另一個屬性或方法具有相同名稱的事件。 若要存取事件,您必須將 對象轉換成其 事件介面

具有事件的 Office PIA 類型會實作兩個介面:一個是包含所有屬性和方法的核心介面,一個是包含物件所公開之事件的事件介面。 這些事件介面會使用命名慣例 _<objectname>Events<n>事件,例如 AppEvents_Event 和 。 ApplicationEvents2_Event 如果您無法存取預期在物件上找到的事件,請將對象轉換成其事件介面。

例如,Application 物件具有 NewWorkbook 事件和 NewWorkbook 屬性。 若要處理 NewWorkbook 事件,請將 Application 轉換成 AppEvents_Event 介面。 下列程式碼範例示範如何在 Excel 的文件層級專案中執行這項作業。

private void ThisWorkbook_Startup(object sender, System.EventArgs e)
{
    ((Excel.AppEvents_Event)this.Application).NewWorkbook += 
        new Excel.AppEvents_NewWorkbookEventHandler(ThisWorkbook_NewWorkbook);
}

void ThisWorkbook_NewWorkbook(Excel.Workbook Wb)
{
    // Perform some work here.
}

如需 Office PIA 中事件介面的詳細資訊,請參閱 Office 主要 Interop 元件中的類別和介面概觀

問題 2:無法在以 .NET Framework 4 或 .NET Framework 4.5 為目標的項目中參考 Office PIA 類別

在以 .NET Framework 4 或 .NET Framework 4.5 為目標的專案中,參考 Office PIA 中定義之類別的程式代碼預設不會編譯。 PIA 中的類別會使用命名慣例 <物件名稱>類別,例如 DocumentClassWorkbookClass。 例如,Word VSTO 載入巨集專案中的下列程式代碼將不會編譯。

Word.DocumentClass document = (Word.DocumentClass) Globals.ThisAddIn.Application.ActiveDocument;

這段程式碼會導致下列編譯錯誤:

  • Visual Basic:「當類別 』DocumentClass' 的參考使用 No-PIA 模式連結時,不允許參考類別'DocumentClass'」。
  • Visual C#:“Interop 類型 'Microsoft.Office.Interop.Word.DocumentClass' 無法內嵌。 請改用適當的介面。」

若要解決這個錯誤,請修改程式碼以參考對應的介面。 例如,不要參考 DocumentClass 物件,改為參考 Document 介面的執行個體。

Word.Document document = Globals.ThisAddIn.Application.ActiveDocument;

以 .NET Framework 4 或 .NET Framework 4.5 為目標的專案,預設會自動內嵌 Office PIA 中的所有 Interop 類型。 之所以會發生這個編譯錯誤,是因為內嵌的 Interop 類型功能僅適用於介面,而不適用於類別。 如需 Office PIA 中介面和類別的詳細資訊,請參閱 Office 主要 Interop 元件中的類別和介面概觀。 如需 Office 專案中內嵌 Interop 類型功能的詳細資訊,請參閱 設計和建立 Office 解決方案

問題 3:無法辨識 Office 類別的參考

例如 Application 的某些類別名稱位於多個命名空間中,例如 Microsoft.Office.Interop.WordSystem.Windows.Forms。 基於這個理由,專案範本頂端的 Imports/using 語句包含速記限定常數,例如:

using Word = Microsoft.Office.Interop.Word;

使用 Imports/using 語句的這個用法需要您將 Office 類別的參考與 Word 或 Excel 限定符區分,例如:

Word.Document doc;

如果您使用不合格的宣告,您將會收到錯誤,例如:

Document doc;  // Class is ambiguous

即使您已匯入 Word 或 Excel 命名空間,而且可以存取其中的所有類別,但您必須使用 Word 或 Excel 完整限定所有類型,才能移除命名空間模棱兩可。

建置項目時的問題

當您建置 Office 專案時,可能會遇到下列問題。

問題 1:無法根據具有限制許可權的檔建置檔層級專案

如果檔具有限制的許可權,Visual Studio 就無法建置檔層級專案。 如果您的專案包含具有限制許可權的檔,專案將不會編譯,而且您會在 [錯誤清單 ] 視窗中收到下列訊息。

無法新增自定義。

如果您想加入具有限制權限的文件,則在開發和建置方案時請使用無限制的文件。 然後,在您發佈方案之後,將限制權限套用至位於發佈位置的文件。

問題 2:刪除 NamedRange 控制件之後發生編譯程序錯誤

如果您從設計工具中不是使用中工作表的工作表中刪除 NamedRange 控件,則可能不會從專案中移除自動產生的程序代碼,而且可能會發生編譯程序錯誤。 為了確定將移式碼移除,請務必選取包含 NamedRange 控制項的工作表,在刪除控制項之前讓它成為現用工作表。 如果刪除控制項時不會刪除自動產生的程式碼,您可以啟用工作表並進行變更,讓工作表標示為已修改,而導致設計工具刪除程式碼。 當您重建此專案時,便會移除程式碼。

偵錯項目時的問題

當您偵錯 Office 專案時,可能會遇到下列問題。

問題 1:當您在開發計算機上發佈並安裝解決方案時,會出現提示卸載

當您偵錯 Office 方案時,可能會見到下列錯誤。

無法安裝自定義,因為目前已安裝另一個版本,而且無法從這個位置升級。

此錯誤表示您先前已在開發計算機上發佈並安裝 Office 解決方案。 為避免這個訊息出現,請先從電腦上已安裝的程式清單中解除安裝此方案,然後再偵錯該方案。 或者,您也可以在開發電腦上建立其他使用者帳戶,以測試所發佈方案的安裝。

問題 2:在 UNC 網路位置建立的文件層級專案不會從 Visual Studio 執行

如果您在 UNC 網路位置建立 Excel 或 Word 文件層級專案,則必須將文件位置加入 Excel 或 Word 的信任位置清單。 否則,當您嘗試在 Visual Studio 中執行或偵錯專案時,將不會載入自定義。 如需信任位置的詳細資訊,請參閱 將信任授與檔

問題 3:偵錯后未正確停止線程

Visual Studio 中的 Office 專案會遵循執行緒命名慣例,該慣例可讓偵錯工具正確關閉程式。 如果您在方案中建立執行緒,則應在每個執行緒名稱加上前置詞 VSTA_,確保停止偵錯時能正確處理這些執行緒。 例如,您可以設定 Name 等候網路事件 VSTA_NetworkListener的線程屬性。

問題 4:無法在開發電腦上執行或偵錯任何 Office 解決方案

如果您無法在開發電腦上執行或開發 Office 專案,您可能會看到下列錯誤訊息。

無法載入自定義,因為無法建立應用程式域。

Visual Studio 會使用融合 (.NET Framework 組件載入器),在載入 Office 方案之前快取組件。 請確認 Visual Studio 可以寫入融合快取,然後再試一次。 如需詳細資訊,請參閱 陰影複製元件

問題 5:在使用 [編輯後繼續] 之後停止檔案層級專案中的調試程式時發生錯誤

如果您在項目處於中斷模式時,使用 [編輯繼續 ] 變更 Excel 或 Word 的檔案層級專案中的程式代碼,則如果您接著停止調試程式,可能會看到含有下列錯誤訊息的對話方塊。

終止處於目前狀態的進程可能會導致不想要的結果,包括數據遺失和系統不穩定。

不論您在對話框中選取 [是] 或 [否],Visual Studio 都會終止 Excel 或 Word 進程,並停止調試程式。 若要停止專案偵錯而不顯示此對話方塊,請直接結束 Excel 或 Word,而不是在 Visual Studio 中停止偵錯工具。

參考資料