2017-08-02 170 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からクエリを実行するための適切な方法は、クエリ定義コレクションを次のとおりです。 CurrentDb.QueryDefs("MyQuery").Execute

編集し、次のようにコード:クエリを実行する前にDoCmd.SetWarnings Falseを設定すると、おそらくあまりにも動作することを

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 

注意、私のソリューションはよりクリーンです(警告を隠す代わりにクエリを実行した後、クエリを実行してから結果をユーザーに表示しようとしています)。

関連する問題