2012-02-28 27 views
13

如果我有一個電子表格,我已經從VBA編輯器中引用了MS Outlook 14.0 Object Library,並且只安裝了MS Outlook 12.0的用戶,那麼當用戶打開電子表格時,他們會在此行上發現編譯錯誤:防止因用戶安裝舊版MS Office(MS Outlook)而導致Excel VBA編譯錯誤?

Range("export_date") = Date - 1 

如果他們走進工具,參考文獻,在參考文獻列表中,有這樣的錯誤:

MISSING: MS Outlook 14.0 Object Library 

如果他們取消了圖書館,並改爲選擇

MS Outlook 12.0 Object Library

...代碼然後正確編譯和電子表格適用於他們。

我真的不明白爲什麼它在Date()函數上失敗,因爲這是VBA函數,而不是Outlook函數。但更重要的是,有沒有辦法避免這種情況?我唯一能想到的就是不設置引用,只使用Object類型的變量並通過CreateObject(「Outlook.Application」)等實例化,但我討厭放棄強類型等等。

Can任何人都可以提出一種更好的方法來處理與舊版MS Office的向後兼容問題?

回答

22

tbone,你指的是強打字被稱爲「早綁定」。

不幸的是,早期綁定的一個缺點是,如果最終用戶沒有與您的版本相同的版本,那麼您將得到這些錯誤。

如果你問我,我更喜歡後期綁定(如果你沒有創建引用和使用CreateObject創建一個實例)

一個有趣的閱讀。

主題:使用早期綁定和自動化後期綁定

鏈接http://support.microsoft.com/kb/245115

我的建議

不要放棄早期綁定,如果你喜歡它,因爲智能感知。但是,在分發應用程序之前,請將代碼更改爲Latebinding。在「早期綁定」和「晚期綁定」中編碼的方式沒有多大區別。

下面是一個例子

早期綁定

'~~> Set reference to Excel Object Library 
Sub Sample() 
    Dim oXLApp As Excel.Application 
    Dim oXLBook As Excel.Workbook 
    Dim oXLSheet As Excel.Worksheet 

    '~~> Create a new instance of Excel 
    Set oXLApp = New Excel.Application 
    '~~> Add a new workbook 
    Set oXLBook = oXLApp.Workbooks.Add 
    Set oXLSheet = oXLBook.Worksheets(1) 

    ' 
    '~~> Rest of the code 
    ' 
End Sub 

後期綁定

'~~> Doesn't require a reference to Excel Object Library 
Sub Sample() 
    Dim oXLApp As Object 
    Dim oXLBook As Object 
    Dim oXLSheet As Object 

    '~~> Create a new instance of Excel 
    Set oXLApp = CreateObject("Excel.Application") 
    '~~> Add a new workbook 
    Set oXLBook = oXLApp.Workbooks.Add 
    Set oXLSheet = oXLBook.Worksheets(1) 
    ' 
    '~~> Rest of the code 
    ' 
End Sub 

HTH

西特

+1

該死的,你的回答就是我害怕的情況。 「...在您分發您的應用程序之前,將代碼更改爲Latebinding。」 - 說起來容易做起來難! :)如果一個人做了很多這樣的事情,那麼使用舊的類型庫會更可取,但對於我的情況,我只會使用Early Binding,我猜。 – tbone 2012-02-29 00:53:59

+1

@tbone:相信我。將早期綁定轉換爲後期綁定非常容易:) – 2012-02-29 06:44:55

+2

@tbone當您嘗試在運行時添加對不同outlook版本的引用時,我會與Sid的建議一起去解決這個問題。 +1 – brettdj 2012-02-29 07:56:47

相關問題