更改代碼以使用後期綁定:
Public Function LicenseTBarCode()
On Error GoTo Err_LicenceTBarCode
Dim TB
Set TB = CreateObject("TBarCode10.TBarCode10")
TB.LicenseMe "<EXPUNGED>", eLicKindSite, 1, "<EXPUNGED>", eLicProd1D
Set TB = Nothing
Exit Function
Err_LicenceTBarCode:
MsgBox "TBarcode Software is not installed. Please contact the database administrator.", vbExclamation, Error
DoCmd.Quit
End Function
爲了這個工作得很好,你真的需要使用您的所有的TBarCode代碼後期綁定,包括任何其他的TBarCode對象你可能正在使用。如果您還不熟悉延遲綁定,那麼首先需要理解一些難題,特別是如果您正在使用任何使用工廠模式的類。
通過後期綁定,您將取消選中對DLL的引用,然後您的代碼需要編譯時不會出錯。由於您無法訪問智能感知,因此使用延遲綁定進行開發可能具有挑戰性。最好使用Early Binding進行開發,然後將代碼轉換爲Late Binding。
您在Late Binding中丟失的另一件事是在原始對象中定義的任何常量。你必須自己創造這些。根據您需要使用的數量以及您需要使用它們的位置,創建一個模塊來保存這些常量可能是最簡單的。你真的只需要在你的代碼中實際使用的常量。
Global Const eLicKindSingle = 1 'Single license for exactly one computer
Global Const eLicKindSite = 2 'Site license for an arbitrary number of computers within one site (or one facility) at one legal address
Global Const eLicKindDeveloper = 3 'Developer license for redistribution to 3rd party
Global Const eLicKindWeb = 3 'Web-server license
Global Const eLicProd1D = 32 '(1D codes)
Global Const eLicProd2D = 33 '(2D codes)
或者,您可以使用常量包含的值。例如:
TB.LicenseMe "<EXPUNGED>", 2, 1, "<EXPUNGED>", 32
此外,據我所知晚期綁定不適用於ActiveX控件。 ActiveX控件本質上是早期的。
還有另一種解決這個問題的方法。我使用「starter」數據庫文件來處理主數據庫的一些先決條件。該入門數據庫不使用任何引用。它只檢查文件系統以查看是否安裝了正確的文件。如果它們不是,它會彈出一個帶有正確錯誤/警告的消息框,然後它會運行主數據庫文件或選擇不運行它,具體取決於您寫入的邏輯。這是避免使用Late Binding的一種方法。
來源
2012-06-12 11:38:34
HK1
您的錯誤代碼是一般的方式,但我懷疑這個問題是在'作爲新的TBarCode10'暗淡的TB。這表明您已經創建了相關圖書館的參考,這是這種情況嗎? – Fionnuala
是的,有一個使用的類型庫。當庫不可用時會發生此問題。 我曾經想過,如果找不到庫,那麼它會去錯誤處理程序。 – VBwhatnow
您應該閱讀http://www.accessmvp.com/djsteele/AccessReferenceErrors.html – Fionnuala