從 Visual Studio Tools for Office 2003 版升級
更新:2007 年 11 月
在您將 Visual Studio Tools for Office (2003 版) 升級為 Microsoft Visual Studio 2005 Tools for the Microsoft Office System (Visual Studio Tools for Office) 之後,您必須針對文件層級專案手動執行一些升級步驟。
在新的專案系統中,專案程式碼範本已大幅變更。升級的專案中雖然會有新的專案架構,但是程式碼仍存放在以舊版專案程式碼範本為基礎的原始程式碼檔中。為了讓方案在升級後可以立即執行,新的專案類別會產生舊的匯入類別 (原始類別預設命名為 OfficeCodeBehind)。若要進行完整的升級,您必須依照本主題中的描述,將舊的 OfficeCodeBehind 類別的程式碼移至新的文件、活頁簿或工作表類別中。
新專案系統和結構
Visual Studio Tools for Office (2003 版) 中的專案系統有程式碼的單一主要類別檔案。新專案系統的特色是在 [方案總管] 中,提供可以代表文件或活頁簿的容器 (Container) 結構。程式碼的類別檔案在容器結構之下。這些類別檔案底下則是隱藏檔案,內含由 Visual Studio Tools for Office 產生的程式碼。因為在開發期間會重新產生隱藏檔的程式碼,您所做的變更也會遺失,所以強烈建議您不要修改這些程式碼。
Excel 活頁簿和範本專案
現在 Excel 活頁簿和範本專案中,每一份工作表都有個別的類別檔案,而整份活頁簿也有一個類別檔案。工作表特有的程式碼 (例如回應工作表控制項的程式碼),就應該放在工作表類別中。就新文件而言,這些類別名稱會預設為 Sheet1.vb 或 Sheet1.cs、Sheet2.vb 或 Sheet2.cs 等。會影響整個活頁簿的程式碼 (例如活頁簿 Open 事件、BeforeClose 事件和執行窗格程式碼),則應該放在活頁簿類別中。這個類別的預設名稱為 ThisWorkbook.vb 或 ThisWorkbook.cs。
Word 文件和範本專案
Word 文件和範本專案有一個程式碼檔案,內含所有與文件相關的程式碼。這個類別的預設名稱為 ThisDocument.vb 或 ThisDocument.cs。
如需詳細資訊,請參閱 Office 專案範本。
升級程序
升級專案時,Visual Studio 會執行下列工作:
升級專案以符合新的檔案格式和專案結構。
將現有文件複製至新的專案資料夾中。
移除 _AssemblyName0 和 _AssemblyLocation0 的自訂文件摘要資訊,不讓現有的 Managed 程式碼擴充執行 (專案建立後會再加入這些屬性)。
加入原始主要程式碼檔,另加入註解來解釋功用,並將檔名從 <DocumentName> 變更成 <DocumentName>(old)。
將原始專案的所有檔案加入至新的專案中。
將所有現有的參考加入至新的專案。
現有的程式碼都不會移轉到新的類別。反而會從新主要類別的 Startup 方法,呼叫舊主要類別的 _Startup 方法。這樣會產生舊的類別,讓方案以和舊版相同的方式執行。
<DocumentName>(old) 中的預設類別名稱為 OfficeCodeBehind。在已升級的 Word 專案中,主要類別的預設名稱為 ThisDocument。在已升級的 Excel 專案中,內含活頁簿執行層級程式碼的主要類別預設名稱為 ThisWorkbook,而工作表執行層級程式碼的預設名稱為 Sheet1、Sheet2 等。
若要完成升級,您必須:
手動將舊類別 (預設名稱為 OfficeCodeBehind) 的程式碼移至新的文件、活頁簿和工作表類別,接著刪除舊的程式碼檔。然而,如果您想讓現有程式碼維持原狀,則可以保留舊的程式碼檔,然後從新的類別呼叫程式碼來執行。任何由工具加入的新程式碼都會放在新的類別中。
依照以下說明更新程式碼。
以 Managed 控制項取代所有 ActiveX 控制項。
您還可以選擇:
- 重構 C# 程式碼。
將舊版主要類別程式碼移至新的類別
建議將程式碼移出舊類別,並放入新類別中,如此您就可以利用 Visual Studio 中的工具。工具產生程式碼時,也會自動使用新類別。例如,當您將按鈕加入至文件中,然後按兩下以取得程式碼,則預設的事件處理常式會加入至新類別。
如果要升級 Excel 方案,請考慮哪些類別應包含您移來的每個方法。如果方法和整個活頁簿和 (或) 所有工作表相關,就應該將程式碼放在 ThisWorkbook 類別中。如果程式碼僅和一個工作表相關,例如工作表上某個控制項的程式碼,則程式碼屬於該適當的工作表類別。
為了幫助您開始進行,新 ThisDocument 或 ThisWorkbook 類別中產生的程式碼會包含加上註解的預留位置方法。您可以採用下列其中一種方式使用這些方法:
從舊類別中將所有程式碼取出,然後放在已升級方案所提供的新類別中。
在新方法中撰寫程式碼,呼叫舊類別中的舊方法。要讓這個方式有作用,您必須變更舊類別中的方法,讓它們不再屬於私用的方法。
範例
下列為預留位置方法的範例,這些方法會產生舊的類別,並在該類別中呼叫方法:
Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Startup
OldCode = New OfficeCodeBehind()
OldCode._Startup(Me.ThisApplication, Me)
End Sub
''Private Sub ThisDocument_Open() Handles MyBase.Open
'' OldCode.ThisDocument_Open()
''End Sub
''
''Private Sub ThisDocument_Close() Handles MyBase.CloseEvent
'' OldCode.ThisDocument_Close()
''End Sub
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
OldCode = new OfficeCodeBehind();
OldCode._Startup(this.Application, this);
}
//private void ThisDocument_Open()
//{
// OldCode.ThisDocument_Open()
//}
//
//private void ThisDocument_Close(ref bool Cancel)
//{
// OldCode.ThisDocument_Close(ref Cancel)
//}
將所有程式碼都移到新類別之後,請移除舊類別。
更新程式碼
如果現有的程式碼參考 Application、呼叫某些事件或方法,或是依賴於 Open 事件,則您可能需要對程式碼進行一些變更。
限定應用程式
在 Visual Studio Tools for Office (2003 版) 中,資格不符的 Application 用法會參考 System.Windows.Forms.Application 型別。在 Visual Studio Tools for Office 中,則會參考 Word 或 Excel Application 物件。這意味著,您必須將資格不符的 Application 參考更新為完整的命名空間 System.Windows.Forms.Application,以取得相同的結果。例如,如果您使用 Application.Run(New Form1) 之類的程式碼開啟表單,必須將程式碼重寫為 System.Windows.Forms.Application.Run(New Form1)。
重新命名事件和方法
Word 和 Excel 會公開 (Expose) 某些與物件模型 (Object Model) 之方法相同名稱的事件。例如,Word 文件含有 Close 事件和 Close 方法。Visual Studio Tools for Office 方案程式碼需要針對其中一個成員使用不同的名稱。您必須使用新的名稱取代下列成員的所有現有參考。
Word.Document
針對 Close 事件,請使用 CloseEvent。
針對 Sync 事件,請使用 SyncEvent。
Excel.Worksheet
針對 Activate 事件,請使用 ActivateEvent。
針對 Calculate 方法,請使用 CalculateMethod。
Excel.Workbook
針對 Activate 事件,請使用 ActivateEvent。
針對 Sync 事件,請使用 SyncEvent。
Excel.Chart
針對 Activate 事件,請使用 ActivateEvent。
針對 Select 事件,請使用 SelectEvent。
處理 Open 事件
已升級的專案不會引發 Excel 活頁簿的 Open 事件或 Word 文件的 Open 事件。如果程式碼依賴於 Open 事件,則您應該將程式碼移至 Excel 活頁簿新增的 ThisWorkbook 類別中的 ThisWorkbook_Open() 事件處理常式,或是移至 Word 文件新增的 ThisDocument 類別中的 ThisDocument_Open() 事件處理常式。或者,您也可以從原始 OfficeCodeBehind 類別的 _Startup 方法中呼叫 Open 事件處理常式。
以 Managed 控制項取代 ActiveX 控制項
如果您已在文件或活頁簿中使用 ActiveX 控制項,必須刪除這些控制項,並以 Visual Studio [工具箱] 中的 Managed 控制項取代。在新的 Visual Studio Tools for Office 專案中,ActiveX 控制項有其限制;例如,您無法將資料繫結到 ActiveX 控制項,而且必須使用特別的 Interop 組件,才能針對控制項撰寫程式碼。因此,不支援在新的 Visual Studio Tools for Office 專案中使用 ActiveX 控制項。
重構程式碼 (僅限 C#)
Visual Studio 提供的工具有助於整理並排列 C# 程式碼,而這個程序即稱為重構。在程式碼編輯器中開啟程式碼檔時,包含這些工具的 [重構] 功能表會加入 Visual Studio 中。如需詳細資訊,請參閱重構。
請參閱
工作
HOW TO:從 Visual Studio Tools for Office 升級方案