我有一个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
答案 0 :(得分:0)
您正在尝试检测损坏的参考文献。这是检查和报告损坏的参考文献的程序:
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
答案 1 :(得分:0)
这里的问题是文件对话框不能作为单独的COM对象使用,因此您不能使用CreateObject()来创建这样的实例。
但是,如果您计划在没有办公室参考的情况下分发您的应用程序(我认为您可以安全地执行此操作 - 即使使用运行时),那么您可以将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对象使用,但您仍然可以如上所示采用后期绑定。但是,根据我的经验,使用办公室参考分发运行时是安全的,因此至少对于办公室对话框,您不需要后期绑定。为了可靠性,因为在FileDialog的情况下,后期绑定代码并不是什么大问题,那么我将继续分发没有FileDialog的office引用并使用上面的后期绑定。