2017-08-02 44 views
0

試圖拼湊由以前的員工編寫的舊數據庫,但在Excel中運行宏以鏈接回訪問數據庫時出現運行時錯誤2501,代碼如下有沒有人有任何想法?訪問運行時錯誤2501 - OpenQuery操作取消

Public Sub Auto_Open() 
    If ActiveWorkbook.ReadOnly Then Exit Sub 
    Set accApp = CreateObject("Access.Application") 
    accApp.Visible = False 
    accApp.OpenCurrentDatabase ("i:\database reporting\main.mdb") 
    accApp.DoCmd.OpenQuery "blp_varience_estimate2" 
    accApp.Quit 
    Sheets("Estimate Raw").Select 
    Range("A1").Select 
    Cells.Select 
    Selection.QueryTable.Refresh BackgroundQuery:=False 
End Sub 

感謝

+0

通常,錯誤2501應該只是忽略。請檢查查詢:直接打開mdb並運行查詢。它不應該給任何錯誤。 –

+0

是的,我認爲,但如果我跳過這一點,並忽略它,我得到以下 運行時錯誤2001 您取消了以前的操作 –

+0

是「blp_varience_estimate2」UPDATE查詢嗎?它有什麼作用? – Andre

回答

0

DoCmd.OpenQuery開放給用戶查看查詢,並顯示在操作查詢警告框。您看到的錯誤指的是警告框上的取消操作,該操作可能不會顯示,因爲Access本身沒有顯示,因此會自動取消。

從運行VBA查詢正確的方法是通過QueryDefs集合: CurrentDb.QueryDefs("MyQuery").Execute

編輯您的代碼如下:

Public Sub Auto_Open() 
    If ActiveWorkbook.ReadOnly Then Exit Sub 
    Set accApp = CreateObject("Access.Application") 
    accApp.Visible = False 
    accApp.OpenCurrentDatabase ("i:\database reporting\main.mdb") 
    accApp.CurrentDb.QueryDefs("blp_varience_estimate2").Execute 
    accApp.Quit 
    Sheets("Estimate Raw").Select 
    Range("A1").Select 
    Cells.Select 
    Selection.QueryTable.Refresh BackgroundQuery:=False 
End Sub 

注意,執行查詢可能也工作之前設置DoCmd.SetWarnings False,但我的解決方案更乾淨(只是執行查詢,而不是隱藏警告,然後執行查詢,然後嘗試向用戶顯示結果)