2016-07-08 10 views
2

私は、アクセスデータベースのファイルパスとファイル名を約400個リストしています。 AccessでVBAプログラムを書いて、リストをループし、Accessの2番目のインスタンスで各データベースを開き、必要な情報を取り出しますが、ファイルパスの一部が間違っていて、Accessが開くことができないというエラーが発生します。データベース。Accessの別のインスタンスでopenCurrentDatabaseを処理する際にエラーが発生しました

これを処理しようとするエラーハンドラがあるにもかかわらず、エラーハンドラがトリガされず、代わりにコードがエラーでブレークします。私のオプションは、処理されていないエラーだけを破るように設定されていますが、これは役に立ちません。

appAccessオブジェクトによって生成されたこのエラーをキャプチャする方法はありますか?

Set rstReportList = Currentdb.OpenRecordset("SELECT * FROM tbl_ReportList") 

rstReportList .movefirst 

Do Until rstReportList .EOF 
    On Error Goto CantRun '--Never actually triggers 

    strDb = rstReportList!Location & rstReportList!FileName 

    Set appAccess = CreateObject("Access.Application") 
    appAccess.OpenCurrentDatabase strDb '-- Error 7866 occurs here, code breaks 

    For each qdf in appAccess.Currentdb.QueryDefs 
     UpdateResults rstReportList!ID, rstReportList!FileName, qdf.name, qdf.SQL, qdf.Type 
    Next qdf 
    appAccess.DoCmd.Quit 
NextReport: 
    rstReportList.MoveNext 
Loop 

Set rstReportList = Nothing 
Set appAccess = Nothing 

Exit Function 

CantRun: 
    UpdateResults rstReportList!ID, rstReportList!FileName, "Error", "Error", 999 
    Set appAccess = Nothing 
    GoTo NextReport 
End Function 

答えて

2

...ファイルパスの一部が間違っているとアクセス がデータベースを開くことができないためにエラーになります。

Dir()を使用して、strDbが実際に存在するファイルを指していることを確認してください。そして、存在しないものを開こうとしないでください。

If Len(Dir(strDb)) > 0 Then 
    Set appAccess = CreateObject("Access.Application") 
    appAccess.OpenCurrentDatabase strDb 
    ' ... and everything else you want to do with appAccess 
Else 
    ' What should happen when the file does not exist? 
End If 

実際には手順の最初に一度だけSet appAccess = CreateObject("Access.Application")を行い、その後、OpenCurrentDatabaseCloseCurrentDatabase方法でappAccessを再利用する方が効率的でなければなりません。しかし、これは別の問題です---あなたが直面している#7866エラーの問題とは関係ありません。

+0

これはすばらしいヒントです。HansUp、ありがとう!私はそれが私が直面している問題を解決するだろうと思う。それは、エラーを処理することから私を防ぐ何らかの種類のVBAの制限であるかどうか、またはそれが実際に可能であり、私はちょうど何か間違っているかどうかを知ることはまだ興味があります。 –

+0

OK。 'GoTo'には注意してください。 'GoTo NextReport'を' Resume NextReport'に変更するとどうなりますか? – HansUp

+0

[** GOTO IS EVIL **](http://stackoverflow.com/a/38255542/77335) – HansUp

関連する問題