Изменить код, чтобы использовать позднее связывание:
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 вы можете использовать. Если вы еще не знакомы с Late Binding, сначала вам может быть сложно понять, особенно если вы работаете с любыми классами, использующими шаблон фабрики.
С поздней привязкой вы снимете свою ссылку на DLL, а затем ваш код должен скомпилироваться без ошибок. Разработка с помощью Late Binding может быть сложной задачей, поскольку у вас не будет доступа к IntelliSense. Он лучше всего работает с 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
Кроме того, насколько мне известно, Late Binding не работает с элементами управления ActiveX. Элементы управления ActiveX по своей сути ранней.
Существует еще один способ справиться с этой проблемой. Я использую файл базы данных «стартер», который обрабатывает некоторые предварительные условия для основной базы данных. В этой стартовой базе данных не используются ссылки. Он проверяет файловую систему только на наличие правильных файлов. Если это не так, оно выдает сообщение с правильными ошибками/предупреждениями, а затем запускает основной файл базы данных или не запускает его в зависимости от логики, которую вы вписали в нее. Это один из способов избежать использования Late Binding.
Ваш код ошибки в порядке, но я подозреваю, что проблема заключается в 'Dim TB As New TBarCode10'. Это говорит о том, что вы создали ссылку на соответствующую библиотеку, так ли это? – Fionnuala
Да, есть библиотека типов, которая используется. Проблема возникает, когда библиотека недоступна. Я понял, что если библиотеки не могут быть найдены, то это перейдет к обработчику ошибок. – VBwhatnow
Вы должны прочитать http://www.accessmvp.com/djsteele/AccessReferenceErrors.html – Fionnuala