Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Errorhandling bei integriertem VBScript

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Errorhandling bei integriertem VBScript (12352 mal gelesen)
Bernod
Mitglied



Sehen Sie sich das Profil von Bernod an!   Senden Sie eine Private Message an Bernod  Schreiben Sie einen Gästebucheintrag für Bernod

Beiträge: 40
Registriert: 03.03.2010

erstellt am: 10. Aug. 2010 10:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

Hallo Bernod,
kannst du mal deine Codeschnippsel posten?

Beispiel wäre

...
  Code
...

  On Error GoTo Dummgelaufen01

...
  Code der im Fehlerfalle übergangen wird
...

Dummgelaufen01:
  Code der im Fehlerfalle angesprungen wird


Der Name hinter GoTo muss mit dem des "Resume Label´s" übereinstimmen. Demnach ist in dem Beispiel "ErrHandler" und "Resume Label" nur ein Synonym.

------------------
MFG
Rick Schulz
      Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

roccat
Mitglied
Konstrukteur


Sehen Sie sich das Profil von roccat an!   Senden Sie eine Private Message an roccat  Schreiben Sie einen Gästebucheintrag für roccat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von RSchulz an!   Senden Sie eine Private Message an RSchulz  Schreiben Sie einen Gästebucheintrag für RSchulz

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

 
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 Next

Code

If Err.Number <> 0 then
   msgbox ("Ein Fehler ist aufgetreten. ") & Err.Description
   Exit Sub
   'oder Fehlerbehandlung
End If



...gemacht

Allerdings 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


Sehen Sie sich das Profil von roccat an!   Senden Sie eine Private Message an roccat  Schreiben Sie einen Gästebucheintrag für roccat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Bernod an!   Senden Sie eine Private Message an Bernod  Schreiben Sie einen Gästebucheintrag für Bernod

Beiträge: 40
Registriert: 03.03.2010

erstellt am: 10. Aug. 2010 13:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von roccat an!   Senden Sie eine Private Message an roccat  Schreiben Sie einen Gästebucheintrag für roccat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Bernod 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von Bernod an!   Senden Sie eine Private Message an Bernod  Schreiben Sie einen Gästebucheintrag für Bernod

Beiträge: 40
Registriert: 03.03.2010

erstellt am: 10. Aug. 2010 14:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz