簡體   English   中英

如何在Access 2016中使用VBA檢測對象的存在?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM