2016-08-08 1 views
1

Wenn ich in VBA, meine derzeitigen Verfahren arbeiten würden wie folgt gehen:Kann ich in VBScript einen Fehler auslösen, um Goto zu simulieren?

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 

Aber ich arbeite in VBScript, die nicht diese Art von Goto Funktion haben.

Ich denke daran, das gleiche zu tun, indem ich delibaratly einen Fehler aufzeige. Zum Beispiel:

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 

Gibt es ein potenzielles Problem mit diesem? Soll ich stattdessen Err.Raise benutzen?

Antwort

2

VBScript hat im Gegensatz zu VBA keine On Error Goto. Es hat nur On Error Resume Next.

Der Fall, nach dem Sie suchen, einen Kontrollfluss früh zu beenden, kann jedoch mit der Exit-Anweisung behandelt werden. Weitere Details und Beispiele finden Sie unter this article von Microsoft Scripting Guys.

Wenn Sie derzeit nicht in einem Steuerfluss sind, die Sie verlassen suchen, können Sie es hacken um einen erstellen, die nur einmal ausgeführt werden:

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

Und während das eindeutig ein Hack ist, ich Ich bin mir nicht sicher, ob es schlimmer ist, als zu versuchen, eine direkte "Goto" zu verwenden. Normalerweise kann man die Logik umstrukturieren, um klar zu machen, was man eigentlich macht, ohne solche uneleganten Konstrukte zu benötigen.

+0

Diese Seite ist nützlich, aber ich bin mir nicht sicher, ob das in meinem Fall zutrifft. Ich möchte nicht "Exit Do" insgesamt verlassen; Ich möchte nur zur nächsten Iteration der Do-Schleife springen. Gibt es eine Möglichkeit, das zu tun? Sonst würde ich mit mehreren verschachtelten IF ... Dann Schleifen stecken bleiben. –

+0

Der Hacky-Weg ist ein 'Do' ...' Loop While False' mit einem 'Exit Do' in der Mitte. Aber du versuchst, einem Goto nachzueifern, was bedeutet, dass du sowieso nicht den elegantesten Code willst. Es gibt normalerweise eine Möglichkeit, Dinge so umzustrukturieren, dass der Kontrollfluss klarer ist. –

1

Dies ist in VBScript nicht möglich. Die einzige Fehlerbehandlung, die Sie haben, ist On Error Resume Next und, um das innerhalb eines bestimmten Bereichs zu deaktivieren, On Error Goto 0.

Es gibt keine solche Idee wie eine Beschriftung in VBScript.

Verwandte Themen