Autor
|
Thema: Errorhandling bei integriertem VBScript (12352 mal gelesen)
|
Bernod Mitglied
Beiträge: 40 Registriert: 03.03.2010
|
erstellt am: 10. Aug. 2010 10:39 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe über die Funktion "Macros with arguments" in der KNowledge Advisor Workbench ein VB Script in mein CATPart eingefügt. Ich schaffe es nun nicht Errorhandling einzubauen. Mir wird bei den Befehlen
Code: On Error Goto ErrHandler:
und
Code: Resume Label:
ein Syntaxfehler angezeigt.Kann man diese Befehle bei diesem integrierten VBScript nicht anwenden? Vielen Dank schonmal. Gruß, Bernod Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 10. Aug. 2010 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für Bernod
|
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 10. Aug. 2010 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für Bernod
Hallo Bernod, ich kann mich irren aber ich glaube in VBScript: funktioniert "On Erroro Goto Errorhandler" nicht. (nur unter Catvba) alternative wäre: On Error GoTo 0 Err.Clear 'hier machst du etwas, was einen fehler erzeugen könnte '... 'hier fragst du ob ein fehler enstanden ist If Err.Number <> 0 Then 'mach was zur fehler Behandlung Err.Clear End If On Error Resume Next mfG Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 10. Aug. 2010 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für Bernod
Zitat: Original erstellt von roccat: Hallo Bernod,ich kann mich irren aber ich glaube in VBScript: funktioniert "On Erroro Goto Errorhandler" nicht. (nur unter Catvba) alternative wäre: On Error GoTo 0 Err.Clear 'hier machst du etwas, was einen fehler erzeugen könnte '... 'hier fragst du ob ein fehler enstanden ist If Err.Number <> 0 Then 'mach was zur fehler Behandlung Err.Clear End If On Error Resume Next mfG Mario
Hallo Mario, ich wüsste nicht, was das On Error GoTo 0 bewirken sollte, außer das eben nichts passiert bzw. der Code weiter verarbeitet wird. Ich habe sowas z.B. via Code:
On Error Resume NextCode If Err.Number <> 0 then msgbox ("Ein Fehler ist aufgetreten. ") & Err.Description Exit Sub 'oder Fehlerbehandlung End If
...gemachtAllerdings versuche ich alles was dies zulässt mittlerweile auf VB.Net auszulagern. Dementsprechend greife ich entweder von außen auf die Applikation zu oder ich verarbeite die im Caita befindliche Daten im CATIA und übergebe diese dann in einem gewünschten Format an die Exe, die dann aus dem klein gehaltenen Makro heraus gestartet wird. Der Vorteil liegt klar auf der Hand. Man ist erstens unabhängiger, zweitens hat man weitaus mehr Möglichkeiten und drittens kann man die Oberfläche der Zeit entsprechend gestalten und muss nicht mit Grafikfehlern unter Vista und Co. rechnen. Ergänzung: ... und vor allem kann man mit Try-Catch-Anweisungen arbeiten, die einem viel mehr ermöglichen. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities [Diese Nachricht wurde von RSchulz am 10. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 10. Aug. 2010 11:29 <-- editieren / zitieren --> Unities abgeben: Nur für Bernod
Hallo Rick, das "Exit Sub" habe mit Fehlerbehandlung gemeint, das müsste ja auch bei: On Error GoTo Dummgelaufen01 Exit Sub Dummgelaufen01: rein. Mit .Net gebe ich dir recht hat man allemal mehr Möglichkeiten, ich weiß aber nicht ob Bernod das hat oder will. nochmal beide Varianten zum Vergleich an einem Beispiel: Sub Variante1() 'Dim dErgebnis As Double (für VBScript unrelevant) On Error GoTo ErrorHandler '(Hier wird bei VBScript ein Fehler auftretten)" dErgebnis = 100 / 0 MsgBox ("Ergebnis: " & dErgebnis) Exit Sub ErrorHandler: MsgBox ("Division durch Null nicht Möglich") End Sub Sub Variante2() 'Dim dErgebnis As Double (für VBScript unrelevant) On Error Resume Next Err.Clear dErgebnis = 100 / 0 If Err.Number <> 0 Then MsgBox ("Division durch Null nicht Möglich") Err.Clear Exit Sub Else MsgBox ("Ergebnis: " & dErgebnis) End If On Error GoTo 0 End Sub Edit:/ @Rick, jetzt hab ich erst verstanden was du gemeint hast, ich habe "On Error Resume Next" und "On Error Goto 0" vertauscht. Sorry Danke für den Hinweis . Ich hab halt nicht getestet nur hier reingetippt. Danke nochmal. /Edit:
[Diese Nachricht wurde von roccat am 10. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernod Mitglied
Beiträge: 40 Registriert: 03.03.2010
|
erstellt am: 10. Aug. 2010 13:14 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen. Vielen Dank erstmal für die Antworten. Ich glaube um ehrlich gesagt auch, dass "on error goto errorhandler:" nicht funktioniert. Mein Codeschnipsel sieht dann ca so aus:
Code:
Sub main() ' ... unwichtiger Programmabschnitt Sprungmarke1: ' ... Programmabschnitt XX On Error Goto Dummgelaufen1: Part1.Update On Error Goto 0 ' ... unwichtiger Programmabschnitt Exit Sub Dummgelaufen1: If <aufgetretener Fehler = bekannter Fehler> Then Resume Sprungmarke1: Else MsgBox("Unbekannter Fehler. Abbruch") Exit Sub End If End Sub
Erklärung: In dem Programmabschnitt XX wird ein Prozess durchlaufen. Abhängig von dem Aufbau des Bauteils tritt dann beim Updaten des Bauteils hin und wieder ein Fehler auf. Dieser Fehler wird aber durch mehrfaches Durchlaufen des Programmabschnitts XX behoben. Deshalb will ich im Falle eines Fehlers in der Zeile "Part1.Update" über den Errorhandler (Dummgelaufen1) wieder vor den Abschnitt XX springen. Problem: Sowohl bei der Zeile "On Error Goto Dummgelaufen1:", als auch bei der zeile "Resume Sprungmarke1" wird ein Syntaxfehler angezeigt. Gruß, Bernod PS: .NET kommt leider nicht in Frage. Es muss (vorerst) mit dem internen VBScript (also die Funktion "Macros with arguments") gelöst werden. [Diese Nachricht wurde von Bernod am 10. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
Beiträge: 172 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 10. Aug. 2010 14:05 <-- editieren / zitieren --> Unities abgeben: Nur für Bernod
Hallo Bernod, versuchs mal so... Sub main() ' ... unwichtiger Programmabschnitt Do 'ggf. um die Anzahl der Versuche einschränken um diese nicht unendlich werden zu lassen: For i=0 to 10
' ... Programmabschnitt XX On Error Resume Next part1.Update Select Case Err.Number Case 0 'kein Fehler, also Schleife verlassen Exit Do 'wenn die For Schleife benutzt wird: Exit For Case 1 'bekannter Fehler Schleife weiterlaufen lassen Case 2 'bekannter Fehler Schleife weiterlaufen lassen '. '. '. Case Else MsgBox ("Unbekannter Fehler. Abbruch") Exit Sub End Select On Error GoTo 0 ' ... unwichtiger Programmabschnitt Loop 'wenn die For Schleife benutzt wird: Next
End Sub ...wobei ich nicht genau weiß, wieso du die Fehler unterscheiden willst. Du könntest auch Abfragen ob das Part upgedated ist mit: Part1.IsUpToDate = True. Und Vorsicht vor der Endlosschleife du mußt dir schon sicher sein das dein CODE den Update-Fehler beheben kann. Ansonsten mit der For Schleife die Anzahl der Durchläufe begrenzen. mfG Mario [Diese Nachricht wurde von roccat am 10. Aug. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernod Mitglied
Beiträge: 40 Registriert: 03.03.2010
|
erstellt am: 10. Aug. 2010 14:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Mario, vielen Dank! So werde ich es umsetzen. Auch das mit dem "isUpToDate" gefällt mir. Ich wusste nicht, dass es solch einen Befehl gibt. Ein Endlosschleife hätte ich aber auch nicht eingebaut, da hatte ich im echten Code natürlich auch einen Zähler drinnen, so dass nach 20 Versuchen abgebrochen wird. Bisher bin ich einmal in eine Endlosschleife gekommen... daraus lernt man schnell Danke nochmals und schöne Grüße, Bernod Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |