使用 VBA 與 .Net 自動化 Excel 的優缺點
我的任務是在 Excel 中創建一個財務規劃工具,該工具將從一些自定義函式/宏中受益。
我最初的反應是使用 VBA。我以前用它來驅動 Excel(比如 5 年前)。但隨後我開始懷疑使用 VSTO 是否會更好。
有沒有人有使用這兩種技術的經驗,並且可以列出優缺點,以便我可以評估哪個課程最好。
我建議您堅持使用 VBA 進行 Excel 標准開發,並在這方面學習 .NET。使用 .NET 肯定是下一步,但它會使您的 Excel 開發更加困難。
此外,VSTO 不支持創建使用者定義的工作表函式(“UDF”),因此您需要 VBA 前端,或在不使用 VSTO 的情況下創建託管 COM 載入項才能執行此操作。相比之下,VBA 允許您幾乎毫不費力地創建 UDF。
使用 .NET 有很多優勢,主要是關於強類型、完整的 OOP 功能以及組織大型項目的能力。但是在部署方面,VBA 比 .NET 具有巨大的優勢,這在處理 .NET 或 VSTO 時使用 Excel 相當複雜。VBA 也是一種更容易學習和入門的語言。
總的來說,我建議您在日常開發中使用 VBA,但同時學習 VB.NET 或 C#,以便您的程式技能可以在 Excel 領域之外得到發展。最終,您的 .NET 技能可以變得足夠強大,以至於您會更喜歡使用它而不是 VBA,但是您必須在 .NET 方面變得非常好才能迎接那一天的到來。
(有關此問題的另一個類似觀點,請參閱如果我在 Visual Studio 中開發 Excel 應用程序,我會失去宏錄製的好處嗎?。)
編輯:關於安迪評論的更新,如下:
部署、調試和 UDF 等問題是我正在尋找比較資訊的問題。從對問題的回答來看,我應該提到我有 5 年以上的 C# 經驗,而我的 VBA 技能(或缺乏技能)十年只出現 3 或 4 次
好吧,是的,你應該說!大多數有此類問題的人都是希望進入 .NET 的 VBA 程序員。所以我誤會了。
在您的情況下,您應該使用 C#,但我強烈建議在 Visual Studio 2010 上使用 C# 4.0,這將極大地改進對 COM 對像模型(如 Excel)進行操作時所需的語法。VS 2010 目前處於 beta 2 階段,RTM 日期定為 4 月 12 日,所以我們快到了。
至於部署,根據您的經驗,我認為您在安裝包等方面不會遇到太多麻煩,Visual Studio Tools for Office (VSTO) 非常適合兩件事:
- 通過拖放設計器為您的載入項創建自定義功能區排列。如果沒有拖放設計器,您必須改為提供 XML。如果你問我,XML 很好,但拖放設計器真的是一個夢想
- 在工作表上使用 .NET 控制項。我不知道這是否是您計劃的一部分,但 VSTO 允許在工作表上使用 .NET 控制項。對於 .NET 程序員來說,這是一個非常好的功能,因為這些控制項看起來更流暢一些,並且專門設計用於與 .NET 一起使用。
不幸的是,VSTO 僅適用於 Excel 2003 及更高版本,我認為您必須為 Excel 2003 和 Excel 2007 創建單獨的載入項。另一方面,可以使不使用 VSTO 的託管 COM 載入項與 Excel 兼容2000以上沒有難度。最後,VSTO 不支持創建 UDF,因此,您必須為此創建託管自動化載入項,或者使用呼叫 VSTO 函式的 VBA 前端。
總的來說,如果你可以限制自己使用 Excel 2007 及更高版本,我會選擇 VSTO。如果您的要求是 Excel 2003 及更高版本,我會考慮 VSTO。如果您需要能夠在 Excel 2000 及更高版本上執行,我會使用託管 COM 載入項。
對於 UDF 支持,我將創建一個託管自動化載入項,它適用於 Excel 2002 及更高版本。如果您需要 Excel 2000 或更低版本上的 UDF,那麼您需要一個 VBA 前端,它在您的 .NET 程序集中呼叫 COM 可見的方法。
在我看來,這些是基本的優點和缺點。如果您需要了解更多資訊,請告訴我。
——邁克
這裡有很多很好的答案,所以我會嘗試提出一個尚未提出的觀點。我會堅持使用VBA。有很多原因,但對我來說主要因素是:
- 不需要客戶端有任何指定的版本。.Net 安裝
但是,VBA 顯然沒有得到很好的保護,因此如果您有想要隱藏的程式碼,最好使用 .Net。