2012-07-17

VBA引用項目遺失的困擾..

在VBA中,我們常利用引用項目來達到與其他的程式溝通,但隨著時間的演進,程式軟體的版本更新,造成了新軟體因為引用項目無法對應產生遺失警訊並造成應用軟體無法順利執行..


在VBA中,我們除了利用程式來做單一軟體的自動化以外,甚至會將資料傳給另一個軟體來處理/儲存或顯示,比如,一個Excel的表格資料,傳到Word成為表格,或是傳給OutLook提供Email發送,甚至利用ADO傳給資料庫,或者在下常利用的與AutoCAD結合。

單一軟體單一程式執行一般不會有問題,若是有跨軟體的時候,在撰寫程式時也不會有太大問題,問題是將程式傳給他人使用時,設計者並無法預估對方使用的軟體版本,當然就會造成某些函式庫遺漏的錯誤訊息,程式當然就動不了。

在Office系列,97/2000/2003/2007/2010.....版本眾多,只要版本沒匹配,程式就不動。若再加上AutoCAD每年一個版本,程式開發者要準備多少版的組合才能符合使用者的需求?

在引用項目中,一般我們會先行引用,因為這樣程式設計時才能帶出該物件的屬性/方法,可確保程式碼的正確及快速編寫,這就我們所謂先期引用,當然所有上面會發生的問題也是如此造成。
另外一種所謂後期引用的方法,

 Set obj=CreateObject("??????.Appliction")

程式物件建立的時候,他會自動檢測是否有符合的函式庫,就可以解決掉上述找不到的問題,不過有幾個缺點

  • 效能不如先期引用。
  • 程式撰寫無法帶出屬性/方法等資訊
  • 無法利用瀏覽物件的功能視窗
  • 對屬性方法按F1沒有相關的說明文件

至於你要選用哪一種,那就見仁見智了...

2 則留言:

  1. Mark您好
    以office為例,我個人的看法是,程式只支援安裝軟體時的内定路徑,只為便於維護程式

    回覆刪除
    回覆
    1. @lung:沒讚可以按!
      基本上程式自己寫自己用應該不會有太大問題,問題出在若釋出讓別人使用會造成困擾,除非將程式碼開放,使用者才能修正引用選項..><

      刪除