質問: ACCESSで作ったシステムで毎回起動してから一度目の操作ではエラーが出るところがあります。 そこの処理は ボタンを押すとリモートにある.DATファイルを.CSVファイルに変換して、CSVファイルを「保存済みのインポーと操作」でインポートして、クエリでちょちょちょいとデータを処理して、最後にインポート元のCSVファイルをけす、といった感じです。 エラーメッセージを「すべてのマクロを停止」で停止してから、もう一度ボタンを押すと正常に処理されます。 おそらくマクロが実行された時点(ボタンが押された時点)でインポート元のcsvファイルがないのが問題なのだと思います。解決策としてはVBAでモジュールを作ってエラー処理をするしかないのでしょうか? なんらかのちょっとしたアドバイスや、何でも思いついたことをおっしゃってくださってかまいませんので、少々手を貸していただけませんでしょうか? よろしくお願いします。m(__)m
回答: 予期せぬエラーに対して対策をしておくのはよいことですが、今回のように予期されるエラーであればエラーにならないよう回避してあげる方がよいと思います。 ※エラーの内容によっては回避策を練るよりエラー処理で回避したほうが手っ取り早い場合もありますが。 今回の場合「インポート元のcsvファイルがないのが問題」ということですので、 ・csvファイルが存在しない場合は処理を終了する(またはcsvファイルを必要とする処理をスキップする) ・変換処理が終了するまでcsvファイルを必要とする処理の開始を待機する ・csvファイルの存在チェックを行い、csvファイルが作成されるまで待機する ・csvファイルが存在しない場合はダミーのcsvファイルを作成してとりあえず処理を進める といった対応が考えられます。 待機方法については ・Sleep関数やタイマー機能(これはVBAでは少し面倒ですが)等を利用して一定時間待機する ・ファイルの存在チェックを行い、存在しないうちは次の処理に進まない など、いくつか方法があります。 外部モジュールの変換処理をShell関数などで起動しているのなら、処理が終了するまで次の処理に進まないようなオプションが使えるかもしれません。 そんな具合でいくつか対策は考えられますが、もう少し具体的な実装がわからないとこれ以上のアドバイスは難しそうです。 まずは「インポート元のcsvファイルがなくてもエラーとならない」ような対応策を検討してみてください。 そしてそのエラー回避策を実装するにあたり、 例えば ・エラー発生ケースが多すぎて対応しきれない ・現実的なスピードで行えない といった問題があるようでしたら、エラー処理(On Error)でエラーをキャッチする方法もありかもしれません。 状況に合わせて対応方法をご検討ください。