2016-08-08 5 views
1

は、私の現在の手順では、このような何かを行くだろう:VBScriptでは、Gotoをシミュレートするためにエラーを発生させることはできますか?私はVBAで作業していた場合

Do While MyFile.AtEndOfStream <> True 
arrRecord = Split(MyFile.ReadLine, ",") ' Make an array of the values in this line 

'There are certain records I don't want to process: 
If arrRecord(1) <> "USA" then goto skip 
If arrRecord(0) <= "12/31/2001" then goto skip 

' Otherwise, run the rest of the code on this record 

skip: 
Loop 

しかし、私は後藤のこのような機能を持っていないのVBScriptで働いています。

私はdelibaratlyエラーを提起して同じことをやっていると思っています。たとえば、

Do While MyFile.AtEndOfStream <> True 
arrRecord = Split(MyFile.ReadLine, ",") ' Make an array of the values in this line 

On Error Goto skip 

'There are certain records I don't want to process: 
If arrRecord(1) <> "USA" then Call NoSuchFunction 
If arrRecord(0) <= "12/31/2001" then Call NoSuchFunction 

' Otherwise, run the rest of the code on this record 

skip: 
Loop 

これには何らかの問題がありますか?代わりにErr.Raiseを使うべきですか?

答えて

2

VBScriptはVBAと異なり、On Error Gotoを持っていません。それはOn Error Resume Nextしか持っていません。

しかし、コントロールフローを早期に終了させる場合は、Exitステートメントで処理できます。詳細と例については、Microsoft Scripting Guysのthis articleを参照してください。

あなたが終了しようとしている制御フロー中でないなら、あなたは一度だけ実行されるものを作成することによって、それをハックすることができますが:

Do 
    'Stuff 
    If something Then Exit Do 
    'More Stuff 
Loop While False 'Execute once, can be left early by "Exit Do" 

そして、それは明らかにハックですが、私は」最初の場所でまっすぐな "後藤"を使うよりも悪いことはわかりません。通常、そのような控えめな構造を必要とすることなく、実際に何をしているかを明確にするためにロジックを再構成することができます。

+0

そのページは役に立ちますが、私の場合は該当するかどうかはわかりません。私は "Do Do"を完全に望んでいません。 Doループの次の繰り返しにジャンプしたいだけです。それを行う方法はありますか?さもなければ、私は複数のネストされたIFについています...そして、ループします。 –

+0

ハッピーなやり方は途中で「Do Do ...」と「Loop While False」を「Do Do」にすることです。しかし、あなたはGotoをエミュレートしようとしています。これは、とにかく最も洗練されたコードではないことを意味します。あなたのコントロールフローがより明確になるように物事を再構築する方法があります。 –

1

これはVBScriptでは不可能です。あなたが持っている唯一のエラー処理はOn Error Resume Nextであり、特定のスコープ内で無効にするにはOn Error Goto 0です。

VBScriptにはラベルというものはありません。

関連する問題