2017-10-04 208 views
1

我有一個Access 2016應用程序,可以分發給許多不熟練的用戶。他們通常必須安裝MS Runtime for Access。儘管方向明確,但仍有太多用戶仍然發現應用程序無法打開。看起來早期綁定的對象不存在於系統上。綁定對象不存在時,不會加載或運行代碼,因此甚至不可能提供良好的錯誤消息。如何在Access 2016中使用VBA檢測對象的存在?

我現在正在嘗試編寫一個小程序,其中應用程序所需的所有對象都是後期綁定的,因此能夠說出哪些模塊丟失,如果有的話。我發現的是雖然我知道對象存在,但我的檢測方法仍然失敗。下面的代碼是所需對象的一個​​測試示例。這個測試總是失敗,我不知道爲什麼。我有大約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

[error 429](https://msdn.microsoft.com/en-us/library/aa231060(v = vs.60).aspx) – SeanC

+0

「失敗」是什麼意思 - 錯誤消息,錯誤結果,什麼都沒有發生?查看https://support.office.com/en-us/article/FileDialog-Property-8510B02D-E455-44A9-BF38-3787E6D5C8C1。也許'Set obj = Application.FileDialog(msoFileDialogFilePicker)' – June7

+0

@SeanC我已經在那個列表中。它似乎並不適用。我正在測試的所有對象都存在並在我的主應用程序中工作,它們在早期綁定。爲什麼在這種情況下CreateObject會失敗? – LostInTheTrees

回答

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 
+0

如果某個程序在引用中斷時無法啓動,那麼該代碼如何執行? – LostInTheTrees

+0

換言之,如果引用有問題,程序是否會失敗,因爲無法滿足引用或者第一次使用引用的引用? – LostInTheTrees

+0

我認爲這段代碼不適用於後期綁定(並且在引用出現問題時,使用後期綁定綁定到任何特定對象的版本通常是個好主意)。 –

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對象,但你仍然可以如上面顯示廣告無論如何選擇遲到綁定。但是,根據我的經驗,使用Office引用分發運行時是安全的,因此至少在辦公室對話框中不需要延遲綁定。爲了可靠性,因爲在FileDialog的情況下,後期綁定代碼並不是什麼大問題,那麼我將繼續分發而不使用FileDialog的辦公室參考,並使用上述後期綁定。

相關問題