Ms access 从宏调用函数的VBA错误处理

Ms access 从宏调用函数的VBA错误处理,ms-access,ms-access-2007,vba,ms-access-2010,Ms Access,Ms Access 2007,Vba,Ms Access 2010,在access数据库中,我有一个在启动时调用的小函数,该函数注册一个用于生成条形码的软件 如果没有安装软件,那么Microsoft access运行时错误就会消失,因此我想添加一些适当的错误处理,通知用户问题的原因 此函数在启动时从宏调用,并导致数据库崩溃,而不是错误处理正常工作 我的错误处理是否不正确 Public Function LicenseTBarCode() On Error GoTo Err_LicenceTBarCode Dim TB As New TBarCode10 TB.

在access数据库中,我有一个在启动时调用的小函数,该函数注册一个用于生成条形码的软件

如果没有安装软件,那么Microsoft access运行时错误就会消失,因此我想添加一些适当的错误处理,通知用户问题的原因

此函数在启动时从宏调用,并导致数据库崩溃,而不是错误处理正常工作

我的错误处理是否不正确

Public Function LicenseTBarCode()
On Error GoTo Err_LicenceTBarCode

Dim TB As New 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
公共功能许可证barcode()
On Error GoTo Err_LICENTBARCODE
将TB设置为新的TBarCode10
TB.LicenseMe“”,eLicKindSite,1“”,eLicProd1D
设置TB=无
退出功能
错误许可证代码:
MsgBox“未安装TBarcode软件。请与数据库管理员联系。”,VBEQUOTE,错误
医生,退出
端函数

将代码更改为使用后期绑定:

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
或者,您可以只使用常量包含的值。例如:

TB.LicenseMe "<EXPUNGED>", 2, 1, "<EXPUNGED>", 32
TB.LicenseMe“,2,1,”,32
另外,据我所知,后期绑定不适用于ActiveX控件。ActiveX控件天生就是早期绑定的


还有另一种方法来处理这个问题。我使用一个“starter”数据库文件来处理主数据库的一些先决条件。此starter数据库不使用任何引用。它只检查文件系统以查看是否安装了正确的文件。如果没有,它会弹出一个包含正确错误/警告的消息框,然后运行主数据库文件或选择不运行,具体取决于您写入的逻辑。这是避免使用后期绑定的一种方法。

您的错误代码在一般情况下没有问题,但我怀疑问题出在
Dim TB As New TBarCode10
中。这表明您已经创建了对相关库的引用,是这样吗?是的,使用了一个类型库。当库不可用时会出现问题。我认为,如果找不到库,那么它将转到错误处理程序。您应该注意,在MS Access中,缺少引用可能会导致问题,从而阻止看似无关的代码运行。在大多数情况下,建议您使用后期绑定。我同意@Remou关于后期绑定的观点。我不得不删除我的答案,因为我错过了
Dim
部分。这个答案有些奏效。未安装类型库时,数据库仍会崩溃。很抱歉,我没有在“引用”对话框中关闭引用。我接受这个答案
TB.LicenseMe "<EXPUNGED>", 2, 1, "<EXPUNGED>", 32