瞭解 Office 2010 物件模型中可能有影響的變更

英文原文已於 2011 年 9 月 9 日星期五發佈

作者:功能相容專家 Curtis Sawin

移轉至 Office 2010 時要面對的挑戰之一就是評估 Office 應用程式物件模型變更的影響力。舉例來說,IT 專業人員和開發人員擔心利用舊版 Excel 建立的巨集,會因為物件模型變更過大,到了 Excel 2010 之後就全部失去作用。當您在 MSDN (請參閱本文章結尾的連結) 檢閱過詳細記載最新版本的 Office 2010 應用程式與較舊版本的 Office (Office 2007、2003、XP 以及 2000) 之間的物件模型差異之後,您就會瞭解巨集無法運作的原因。然而,大部分的更動都不會有任何的影響,您的巨集也幾乎不受牽連。而「大部分」是指什麼呢?以下逐一為您摘述:

  • Excel 2010、Word 2010、PowerPoint 2010、Outlook 2010 以及 Access 2010 的物件模型全部加起來之後,會得到超過 2 萬 2 千個項目 (屬性、方法和常數)。
  • 物件模型共有 2,134 個變更
  • 可能有影響的變更有 49 個

49 個可能有影響的變更,跨 5 個應用程式、4 個舊版本。這就是全部的改變。下表為您彙整我們分析得出的數據:

本文說明何謂沒有影響的變更以及可能有影響的變更。另提供:為了方便您日後參考,我們準備了一張表格,內容列出可能有影響的所有變更。文章最後會附上這張表格的 .pdf 檔案。

沒有影響以及可能有影響的變更

MSDN 文件提供每一個 Office 2010 應用程式物件模型的所有變更。這些變更已經過適當排列,所以每一個 Office 舊版本都會列出所有已經更改、移除或者淘汰的方法或屬性。

例如,對 Excel 2010 而言,在物件模型方面有將近 900 個項目與舊版不同。未深入分析之前,看起來為數龐大,十分驚人。MSDN 文章 Excel 2010 物件模型與舊版本之間的變化 (可能為英文網頁)會列出每一個已經變更的項目。列印完整文章,大約有 90 頁。

淘汰的項目– 沒有影響

絕大多數的設計變更都是一些淘汰的 (亦被列入隱藏的) 項目。那麼,什麼是「淘汰的項目」?又如何影響您的巨集?如果某個項目被列入淘汰的項目,這表示您不用期望未來的 Office 版本會再看到它,而且您應該計劃未來升級程式碼。不過淘汰的項目仍然有效!因此,如果您的巨集程式碼是為舊版的 Office 而設計的,而且它包含淘汰的方法、屬性或常數,目前不需要採取任何動作,就可以讓這些項目在 Office 2010 中發揮功能。將近 900 個更改設計的項目 (正確數字應該是 882 個),其中有 794 個是淘汰的項目。這表示 Excel 物件模型所修改的 900 個左右的設計,如果您的巨集包含這些項目,其中將近 800 個是不會產生任何影響的。

所以解決淘汰的項目這件事可以暫緩,不過也不要完全不把它們當一回事。包含類似項目的程式碼應該再檢查一遍並加以更新,這樣才能確定現在淘汰的程式碼不會在未來成為毫無用處的程式碼。

移除的項目 – 有影響

您應該特別留意「移除的」項目。列為已移除的項目不會出現在 Office 2010 物件模型中。如果您有一個巨集包含的項目已經在 Office 2010 移除,那麼這個巨集就再沒有任何功能了。以 Excel 2010 為例,目前有 9 個物件模型項目已經從舊版本移除。您要留意這些項目。請取代它們。

變更的項目 – 幾乎沒有影響

「變更的」項目是一些自舊版本之後又被變更的方法和屬性。例如,變更的方法可能會傳回不同的資料類型,或者是從「唯讀」變更成「讀取/寫入」的屬性。只要稍加分析,就會發現大部分變更的項目都是可接受其他選用參數的方法或屬性。例如,在 Excel 2003,ListRows.Add (可能為英文網頁) 方法提供一個選用的參數。在 Excel 2010,它提供兩個選用的參數。增加的選用參數不會對它的用途產生任何影響。如果您在 Excel 2003 使用這個方法且僅提供一個參數,則相同的程式碼無須經過修改,同樣可以在 Excel 2010 發揮功能。

在 Excel 2010 中,目前有 97 個變更的項目。這些項目都不具可能的影響。現有的程式碼如果包含「變更的」項目,無論這些項目如何變化,都不會受到影響。

所以,總共有 882 個方法和屬性與先前 4 個舊版本的 Excel 不一樣,其中只有 9 個會有影響。

並不是所有更改設計的項目都是毫無影響的。例如,在 PowerPoint 中,Presentation.SaveAs 方法會為選用的參數 FileFormat 使用不同的預設值。這個預設值已經從 “1” (ppSaveAsPresentation,PowerPoint 2003) 變更成 “11” (ppSaveAsDefault,PowerPoint 2010)。因此,如果使用這個方法的時候,未明確提供 FileFormat 參數的值,那麼在 PowerPoint 2003 和 PowerPoint 2010 執行同一個巨集之後,就會產生不一樣的結果。所以,設計的變更是否會產生可能的影響,取決於這個方法的應用方式。

OCCI 不會偵測物件模型的變更?

Office Code Compatibility Inspector (OCCI) (可能為英文網頁) 此類的工具可以用來掃描巨集,瞭解它們是否包含和舊版本不同的程式碼。OCCI 會提供一份報表,裡面列出已經變更、淘汰或移除的項目。您也可以從報表中瞭解目前是否使用任何外部參照 (如果升級作業系統時一併移轉 Office 2010,需特別注意),以及您所做的任何宣告是否未明確標示同樣適用於 64 位元 Office 環境。以下螢幕擷取畫面是 OCCI 在內含巨集的 Excel 活頁簿的發現項目摘要。

請注意,OCCI 使用「重新設計」(redesigned) 這個字代替「移除」(removed) (不過,我不知道這有什麼不同)。

因為 OCCI 會列出所有不一樣的地方,所以您必須排列所有的結果,這樣才能弄清楚哪些是「具體可行」的資訊。這表示 OCCI 會告訴您一些「不一樣的地方」,至於哪些地方需要立即解決?哪些地方最後還是要解決?OCCI 並沒有提供進一步的資訊。下表就是要填補資訊的空白。這張表格列出哪些設計變更會產生可能的影響、應該馬上評估的因素:根據應用方式的不同,包含這些項目的程式碼或許不需要任何的修改。因此,請當它是解決任何巨集的「快速入門」指南。不過,請勿過度依賴任何工具,甚至是以下的表格。冒著被認為有點囉嗦的危險,再說一次,要想確定巨集是否有效,執行巨集是唯一的方法。

結語

下表列出所有可能有影響的變更,其中包括所有已移除的項目,以及可能有影響的變更項目。使用這張表格可快速找出表格中您可能用到的程式碼。雖然可以使用 OCCI 這類工具偵測所有修改過的設計,不過當您將巨集移轉至 Office 2010 時,任何已經變更卻沒有影響的物件模型都不會列入這張表格中,所以請參考這張表格,瞭解哪些是具體可行 (以及值得採用) 的資料。

依賴工具的諸多問題之一就是,這些工具通常提供的資料只利於回答技術性問題 (像是「什麼地方變更了?」),而不是實務問題 (像是「這對於我的解決方案有何影響?」)。工具當然有助於問題的自動偵測,而且又可以加快問題的解決,省時省力,但是過度依賴工具會導致工具提供的資料被誤用至不相關的問題。一如往常,升級至 Office 2010 的時候,想知道您的方案是否有效,最好的方法就是儘可能在測試環境中,進行使用者的實務應用測試。

 

(請按一下本文章結尾的連結,即可下載上述表格的 .pdf 檔案。)

如需詳細資訊 

以下連結提供各種物件模型的差異。

 

這是翻譯後的部落格文章。英文原文請參閱 Understanding potentially impactful changes in the Office 2010 object model