[英]How do I detect the presence of objects using VBA in Access 2016?
我有一个Access 2016应用程序,该应用程序可以分发给许多不是老练用户的用户。 他们通常必须安装MS Runtime for Access。 尽管有明确的指示,但仍有太多用户发现该应用程序无法打开。 似乎早期绑定的对象不存在于系统上。 在没有绑定对象的情况下,不会加载或运行任何代码,因此甚至不可能给出良好的错误消息。
我现在正在尝试编写一个小程序,其中应用程序需要的所有对象都在后期绑定,因此能够说出缺少的模块(如果有)。 我发现的是即使我知道对象存在,我的检测方法仍然失败。 下面的代码是对所需对象进行一项测试的示例。 该测试始终失败,我无法弄清原因。 我大约有7个。 三个似乎正常工作,但其他的则不能。 我应该对“ CreateObject”进行编码吗?
Private Sub btnOffice_Click()
'Office FileDialog MSO.DLL Microsoft Office 16.0 Object Library
Dim obj As Object
On Error GoTo xyzzy
Set obj = CreateObject("Office.FileDialog")
lblOffice.Caption = "Office module present"
Exit Sub
xyzzy:
lblOffice.Caption = officeWarning
MsgBox Err.Description
End Sub
您正在尝试检测损坏的引用。 这是检查和报告损坏引用的过程:
Sub CheckReferences()
Dim ref As Reference
For Each ref In References
If ref.IsBroken Then
MsgBox "Broken reference detected: " & vbCrLf & ref.Name & vbCrLf & ref.FullPath, vbOKOnly + vbCritical, "Broken Reference"
End If
Next ref
End Sub
这里的问题是文件对话框不能作为单独的COM对象使用,因此您不能使用CreateObject()创建这样的实例。
但是,如果您打算在没有Office参考的情况下分发您的应用程序(并且我认为您可以放心-即使在运行时也可以这样做),则可以将FileDialog代码更改为后期绑定:
例如:
Dim f As FileDialog
Set f = Application.FileDialog(msoFileDialogFilePicker)
f.Show
MsgBox "file choose was " & f.SelectedItems(1)
变成这个:
Dim f As Object
Set f = Application.FileDialog(3)
f.AllowMultiSelect = True
f.Show
MsgBox "file choosen was " & f.SelectedItems(1)
因此,在您的情况下,无法将filedialog作为单独的COM对象使用,但是您仍然可以如上所示仍然采用后期绑定。 但是,以我的经验,可以将运行时与Office参考一起分发是安全的,因此至少对于Office对话框,您不需要后期绑定。 出于可靠性考虑,由于对于FileDialog,后期绑定代码不是什么大问题,因此我将继续分发而无需OfficeDialog的FileDialog,并使用上述后期绑定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.