最近很多朋友向我提出Office的開發方式方面的疑惑,主要是針對特定的系統和Office版本不知道選擇哪一種編程語言、創建哪一種類型的項目。
事實確實如此,如果搞不清楚語言的特性和項目類型的特點,很可能走很多彎路。也可能導致開發完的產品不能部署在客戶電腦上。
無論從哪一個角度講,Office開發都是一個相當龐大、復雜的話題。
下面是我整理出的一個按照開發項目分類的表格(*凡是寫有VB.NET的地方,表示C#語言也可以做到)。
話題1:32位和64位的問題
Windows系統分為32位和64位。
32位系統中只能安裝32位Office。
64位系統中可以安裝32位Office,也可以安裝64位Office。
有的同學不知道現在用的Office是多少位,查看方法是,Excel中點擊【文件】,進入Backstage視圖,選擇【賬戶】,點擊“關於Excel”
彈出一個對話框,寫着32位。
我經過開發和測試,發現VB6開發的dll文件不能用於64位Office及其VBA環境。
但是,VB6開發的VB6外接程序,可以用在64位系統中的VB6,這可能是VB6本身不區分32和64位。
這樣得出如下結論:
64位系統下的64位Office,這種環境下就別思考用VB6去開發Office的COM加載項,以及VBA的加載項了。
那么剩下的其他情況,仍然可以使用VB6。
話題2:動態鏈接庫、自定義函數、外接程序的區別
以上三個名詞,確實有聯系也有區別。
- 動態鏈接庫一般指的是用VB6創建的ActiveX DLL項目,編譯生成后的是一個dll文件。可以在VBA工程或VB6工程中的引用中使用該dll文件,從而在代碼中調用dll中的函數和方法。也就是說:動態鏈接庫通常沒有界面,只讓你從其他程序代碼中調用封裝在dll中的函數。
- 自定義函數,通常指的是Excel工作表中的擴展函數,這種自定義函數可以像SUM、Average一樣被使用。自定義函數可以來源於VB制作的動態鏈接庫,也可以來源於VB.NET制作的類庫項目,還可以來源於Excel-DNA項目。
- 外接程序指的是寄生在Office或VBA或VB6中的COM加載項,使用VB6創建ActiveX DLL項目就可以實現多個Office組件共享的COM加載項,也可以開發VBA、VB6編程環境中的COM加載項。同樣使用VB.NET也可以做到。
話題3:如何判斷一個COM加載項是哪一種項目類型做出的?
很多情況下,別人發給我一個安裝包,我安裝了以后可以正常使用,但是怎么知道這個產品是哪種開發方式呢?
下面介紹一個粗略的方法。
在COM加載項對話框中,選中那個你比較關心的COM加載項,看他的位置。如果顯示的是mscoree.dll,那應該是VB.NET或C#開發的外接程序項目。
位置中格式如file:///...|vstolocal,這種的是VSTO外接程序項目。
如果位置中,是本地磁盤中明確的一個dll文件的路徑,可能是VB開發的COM加載項。
話題4:COM加載項開發過程中的自定義界面如何選擇
如果開發對象是Office 2003,只能自定義菜單和工具欄,插件加載時創建自定義工具欄,卸載時刪除工具欄。如果不刪除工具欄,會產生垃圾。
如果開發對象是VBA或VB6編程環境,也只能自定義菜單和工具欄。
如果開發對象是Office 2007以上版本,可以使用自定義菜單和工具欄、使用Ribbon XML自定義功能區等,也可以創建任務窗格。
總結:
- VB6和VB.NET都可以作為Office和VBA的開發語言,都可以創建共享外接程序,可以在一個工程或項目內部實現多個COM加載項。而且,這種開發方式不限組件,只要有COM對話框的Office組件都可以用以上語言開發,例如開發Access的COM加載項。
- 從語言本身來講,VB.NET比VB6強大。
- 上面表格中列出的15種開發方式,我都親手實踐過,結論可靠。
- 其中VBE2014、VBE2019、Favorite、API函數庫是頗具代表性的作品。
本貼中寫的不嚴謹的地方,大家可以發郵件至32669315@qq.com聯系我。
如果大家對上面那一部分感興趣,可以翻看我的博客園中其他博文。