こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBSで特定のエラーが出た場合のみスルーしたい

VBSについて質問です。
VBS実行中、事前に予測できる特定のエラー番号が出た場合にのみ
エラーメッセージを無視させることはできないでしょうか

http://bayashita.com/p/entry/show/76
↑こちらのページ等を拝見させていただき、

事前にエラーが出ることが分かる個所の前に
On Error Resume Next
を挿入して、以降全てのエラーを無視させる。

特定のエラー番号が出た場合に
Select Case Err.Number
Case 53
  WScript.Echo "stop"
End Select
と番号に該当する指示をさせる。

On Error Goto 0
でエラーを正しく表示させるように戻す。

までは分かりました。


複数のVBSを同時に実行する可能性がある環境な為、
エラーメッセージ全てを無視させてしまうと運用に問題があります。

個々のVBSそれぞれで特定のエラーコードのみ無視(といいますか、他アクションへ分岐?)させる方法を教えていただきたいです。。。


具体的には、
ファイルを開くアクションでファイルが無かった場合に
パスが存在しませんという旨のエラーメッセージが出る場合はその時点でVBSの
実行自体を終了したいです。
代替案あれば教えていただけると幸いです。



回答よろしくお願いします!

投稿日時 - 2017-09-21 17:12:03

QNo.9377131

すぐに回答ほしいです

質問者が選んだベストアンサー

>複数のVBSを同時に実行する可能性がある環境な為、
>エラーメッセージ全てを無視させてしまうと運用に問題があります。

On Error Resume Next は、同時実行している他のスクリプトに影響しないよ。もちろん、後から起動されたスクリプトにも影響しない。実行を開始した時点は、全てOn Error Goto 0の状態になる。

投稿日時 - 2017-09-21 20:26:09

お礼

回答ありがとうございます!

なんと、、!
そもそもの認識が間違っていたようですね、、、

投稿日時 - 2017-09-22 10:25:17

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

エラーナンバーによる分岐は、
それはそれで勿論出来るようにしておいた方がいいと思いますが、
VBSの場合は、FSOを使いこなすことの方が大事な気がします。
パスを渡して、ファイルやフォルダの存否確認は出来ますので、
ご質問の課題は、エラーを扱う必要のあるケースでもないように
思うのですが。
エラーコードを丸暗記して使いこなせるレベルともなれば、
敢えてエラーに掛けた方がコーディングが早く済む、
という考えでもいいのかも知れませんが、私の場合は、
 用意されているもので判別可能なものと、
 そうでないものをエラーで扱うのと、
分けて書く方を優先して、必要な場面では徹底してエラーを扱う
みたいな。

> ファイルを開くアクションでファイルが無かった場合に
> パスが存在しませんという旨のエラーメッセージが出る場合はその時点でVBSの
> 実行自体を終了したいです。
> 代替案あれば教えていただけると幸いです。

例えば、
' //
If objFSO.FileExists(strFileName) Then

' 指定パスのファイルが存在する場合の処理

Else

' 指定パスのファイルが存在しない場合の処理
WScript.Echo "message"
WScript.Quit(1)

End If
' //
とか。

投稿日時 - 2017-09-22 05:05:04

お礼

回答ありがとうございます!

>パスを渡して、ファイルやフォルダの存否確認は出来ますので、
>ご質問の課題は、エラーを扱う必要のあるケースでもないように
>思うのですが。

まさしくこれがやりたかったのですが、イマイチ分からなかったので、、

OnErrorで無理やり突破するより、
書いて頂いたサンプルの方が、現在の問題を解決するには確かにスマートに
出来そうです!

大変参考になりましたm(__)m

投稿日時 - 2017-09-22 10:25:43

ANo.1

On Error Resume Next
'ここでエラーが起きそうな処理をする。
(略)
'もしエラーがあったら
If Err.Number <> 0 Then
'エラー番号で処理分けして
Select Case Err.Number
'もしFile not foundだったら
Case 53
  '普通に標準のエラートラップが起きるように設定して
  On Error Goto 0
  '擬似的にエラーを起こして、VBSを例外終了させる
  Err.Raise 53
  '念のためにVBSを終了させるコードを書いておくが、実行されない
  WScript.Quit 53
End Select
'上記で処理しないエラーは無視したいのでエラーをクリアする
Err.Clear
End If

投稿日時 - 2017-09-21 17:45:49

お礼

回答ありがとうございます!

丁寧に教えていただきとてもありがたいのですが、
「On Error Resume Next」を使うと別のスクリプトにも影響
が出ると思っていたので、エラー全てを無視しないで済む書き方
を探していました。
しかし他の方の回答にあるように、他のスクリプトには影響しないんですね、、、

質問内容の理解と説明が浅く申し訳なかったですが、その旨も補足して頂ければわかったのですが、、

次回エラーの分岐を扱う際はそのままコード使わせていただきます!
大変感謝です!

投稿日時 - 2017-09-22 10:25:02

あなたにオススメの質問