アプリ版:「スタンプのみでお礼する」機能のリリースについて

Dirでファイルの存在を確認しworkbooks.openで次々と開き、望みの処理をして次に移る操作をしてます。ファイルが大量にあるので、何らかの理由で開けない事がたまにあり、処理が中断してしまいます。。その時、処理を止めずさっさと次に移るにはどうすればいいでしょうか?

要はファイルを開く際のエラー判定方法を知りたいのです。

A 回答 (2件)

エラーをトラップするには、On Errorステートメントを使います。


On Errorステートメント自体は、何かをする命令ではないのですが、
これ以降に発生したエラーに対しての動作が定義できます。
通常、Workbook.Open でエラーが発生すると、そこでプログラムの
動作は停止しますが、次のようなコードにすると動作は停止せず、
行ラベル「ErrorHandler」へ制御が飛びます。

On Error GoTo ErrorHandler
Workbook.Open~  '←ここでエラーが発生すると
On Error GoTo 0
  ・
  ・
  ・
Exit Sub
ErrorHandler:  '←ここへ制御が移ります
  ・
  ・
End Sub
 
OverTheGalaxyさんが書いたプログラムの構造が分からないので、何とも言えないのですが、
きれいに構造化されていれば、Subプロシージャを抜けるだけで対応できるかもしれません。

ちなみに、On Error で定義した動作は、すべてのエラーで有効になってしまいます。
デバッグ中のプログラムは、色々なところでエラーを起こすものですが、その場合も
動作は停止しません。(おかしな動作をするだけで、エラーの発生箇所が分からない状況になります)
エラーの発生が予想される箇所(今回の場合は、Workbook.Open)を過ぎたら、速やかに
エラートラップを無効にすることをお勧めします。
エラートラップを無効にするには、「On Error GoTo 0」を使います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ErrorHandlerへ移動しエラー用の処理を実行した後、どうなるのでしょうか?On Error GoTo 0 へ戻るのでしょうか?

お礼日時:2016/02/05 22:31

Resumeステートメントで戻り先を指定します。


こんな感じです。

ErrorHandler:
  ・
  ・
Resume '←エラーが発生した命令から実行が再開されます。
Resume Next '←エラーが発生した命令の次の命令からに再開されます。
Resume 行ラベル '←指定した行ラベルへ戻ります。
  ・
  ・  ' それ以外にも、Exit SubやEnd等も記述可能だと思いますが、何も書かないと
End Sub '←ここにくるので、当プロシージャは終了します。

詳しくは、ヘルプを参照してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
時々目にするResumeはこうやって使う!の一端が見えた気がしました。
実はErrHandlerなんて初めて使います。

お礼日時:2016/02/05 23:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!