Autor
|
Thema: On Error Goto läuft nur einmal durch (1867 mal gelesen)
|
CATIA86 Mitglied Maschinenbauingenieur
Beiträge: 26 Registriert: 17.06.2015 Windows 10 64 bit CATIA V5-6R2016 Microsoft .NET Version 4.6.01038 Visual Basic 2013
|
erstellt am: 29. Jul. 2015 00:56 <-- editieren / zitieren --> Unities abgeben:
Liebe Community, Ich versuche ein Makro zu schreiben welches den Namen und die Länge eines Tropfen aus dem Konstruktionsbaum des Blech Modellers liest und diese mit einer Message ausgibt. Ich habe zur Kontrolle mehrere Fehler eingebaut. Der erste Fehler wird entdeckt die weiteren aber nicht mehr. Die Recherche in Google hat ergeben, dass VBA den Fehler speichert und sobald ein weiterer auftaucht überfordert ist. Im Netz wurde einige Vorschläge mit "On Error GoTo 0" und/oder Err.Clear vorgeschlagen. Leider ist es mir nicht gelungen diese richtig einzubauen. Könnt Ihr mir bitte behilflich sein. Bin auf eure Hilfe angewiesen. Vielen Dank
Code: Sub tropfenflansch() Dim oSel As Selection Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim parameters1 As Parameters Set parameters1 = part1.Parameters Set part1 = CATIA.ActiveDocument.Part Set oSel = CATIA.ActiveDocument.Selection oSel.Search "CATSmd_Search.PredefinedFlange.Type=TearDrop,all" If oSel.Count >= 1 Then For i = 1 To oSel.Count + 10 Dim length1 As Length Set length1 = parameters1.Item("Part1\Hauptkörper\Tropfen." & i & "\Länge") On Error GoTo A H = length1.Value MsgBox ("Tropfen." & i & " ist vorhanden und hat die Länge "& H &"") A: Next End If oSel.Clear End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
imation1999 Mitglied dipl.-ing. Maschinenbau
Beiträge: 276 Registriert: 02.08.2011 Dell Precision T3500 Intel® Xeon® Quad Core NVIDIA Quadro® 5000 Win7 x64 Ultimate CATIA V5 R20 SP2
|
erstellt am: 29. Jul. 2015 06:26 <-- editieren / zitieren --> Unities abgeben: Nur für CATIA86
Code: For i = 1 To oSel.Count + 10 Dim length1 As Length On Error GoTo A 'Fehlerbehandlung einschalten Set length1 = parameters1.Item("Part1\Hauptkörper\Tropfen." & i & "\Länge") On Error GoTo 0 'Fehlerbehandlung ausschalten H = length1.Value MsgBox ("Tropfen." & i & " ist vorhanden und hat die Länge "& H &"") A: MsgBox ("Tropfen." & i & " ist nicht vorhanden.") Next
[Diese Nachricht wurde von imation1999 am 29. Jul. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CATIA86 Mitglied Maschinenbauingenieur
Beiträge: 26 Registriert: 17.06.2015 Windows 10 64 bit CATIA V5-6R2016 Microsoft .NET Version 4.6.01038 Visual Basic 2013
|
erstellt am: 29. Jul. 2015 09:50 <-- editieren / zitieren --> Unities abgeben:
|
imation1999 Mitglied dipl.-ing. Maschinenbau
Beiträge: 276 Registriert: 02.08.2011 Dell Precision T3500 Intel® Xeon® Quad Core NVIDIA Quadro® 5000 Win7 x64 Ultimate CATIA V5 R20 SP2
|
erstellt am: 29. Jul. 2015 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für CATIA86
|
CATIA86 Mitglied Maschinenbauingenieur
Beiträge: 26 Registriert: 17.06.2015 Windows 10 64 bit CATIA V5-6R2016 Microsoft .NET Version 4.6.01038 Visual Basic 2013
|
erstellt am: 29. Jul. 2015 10:15 <-- editieren / zitieren --> Unities abgeben:
|
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 29. Jul. 2015 15:08 <-- editieren / zitieren --> Unities abgeben: Nur für CATIA86
Hallo catia, füg bitte nach der Sprungadresse 'A:' die Zeile in Dein Makro ein: Code: Sub tropfenflansch() Dim oSel As Selection Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim parameters1 As Parameters Set parameters1 = part1.Parameters Set part1 = CATIA.ActiveDocument.Part Set oSel = CATIA.ActiveDocument.Selection oSel.Search "CATSmd_Search.PredefinedFlange.Type=TearDrop,all" If oSel.Count >= 1 Then For i = 1 To oSel.Count + 10 Dim length1 As Length Set length1 = parameters1.Item("Part1\Hauptkörper\Tropfen." & i & "\Länge") On Error GoTo A H = length1.Value MsgBox ("Tropfen." & i & " ist vorhanden und hat die Länge "& H &"") A: debug.print "Error found!" Next End If oSel.Clear End Sub
Tschau, Joe PS: Falls Du nicht mit dem VBA-Editor arbeitest, ersetze bitte Debug.Print "Error found!" mit MsgBox "Error found!" ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CATIA86 Mitglied Maschinenbauingenieur
Beiträge: 26 Registriert: 17.06.2015 Windows 10 64 bit CATIA V5-6R2016 Microsoft .NET Version 4.6.01038 Visual Basic 2013
|
erstellt am: 29. Jul. 2015 15:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Joe, ich habe die MsgBox eingefügt. Dann kommt bei jedem Durchlauf diese MsgBox bis dann der zweite Fehler kommt und das Makro stoppt. Wenn ich vor die MsgBox ein On Error GoTo 0 einfüge wird der erste Fehler erkannt, beim zweiten leider wieder nicht mehr Grüße [Diese Nachricht wurde von CATIA86 am 29. Jul. 2015 editiert.] [Diese Nachricht wurde von CATIA86 am 29. Jul. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CATIA86 Mitglied Maschinenbauingenieur
Beiträge: 26 Registriert: 17.06.2015 Windows 10 64 bit CATIA V5-6R2016 Microsoft .NET Version 4.6.01038 Visual Basic 2013
|
erstellt am: 29. Jul. 2015 15:45 <-- editieren / zitieren --> Unities abgeben:
Hallo an Alle, ich habe es gelöst. Anstatt On Error GoTo 0 muss es On Error GoTo -1 heißen. Danke an Alle für die Unterstützung Code: Sub tropfenflansch() Dim oSel As Selection Dim partDocument1 As PartDocument Set partDocument1 = CATIA.ActiveDocument Dim part1 As Part Set part1 = partDocument1.Part Dim parameters1 As Parameters Set parameters1 = part1.Parameters Set part1 = CATIA.ActiveDocument.Part Set oSel = CATIA.ActiveDocument.Selection oSel.Search "CATSmd_Search.PredefinedFlange.Type=TearDrop,all" If oSel.Count >= 1 Then For i = 1 To oSel.Count + 10 Dim length1 As Length Set length1 = parameters1.Item("Part1\Hauptkörper\Tropfen." & i & "\Länge") On Error GoTo A H = length1.Value MsgBox ("Tropfen." & i & " ist vorhanden und hat die Länge "& H &"") A: On Error GoTo -1 Next End If oSel.Clear End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 29. Jul. 2015 15:51 <-- editieren / zitieren --> Unities abgeben: Nur für CATIA86
Hallo catia, ich hab die Routine umgebaut; die Dims nach vorne(und aus der Schleife raus!), die Fehlerbehandlung neu. Wenn jetzt beim Ablaufen des Makros ein unbehandelter Fehler auftritt, kommt eine MsgBox mit Fehlernummer und Text. Diese Fehlernummer handelst jetzt in der Select Case ab(gegebenenfalls legst einen neuen 'Case' an). Das so lange, bis alle Fehler abgehandelt werden. Code:
Sub tropfenflansch() Dim oSel As Selection Dim partDocument1 As PartDocument Dim length1 As Length Dim part1 As Part Dim parameters1 As Parameters On Error GoTo tropfenflansch_Error Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set parameters1 = part1.Parameters Set part1 = CATIA.ActiveDocument.Part Set oSel = CATIA.ActiveDocument.Selection oSel.Search "CATSmd_Search.PredefinedFlange.Type=TearDrop,all" If oSel.Count >= 1 Then For i = 1 To oSel.Count + 10 Set length1 = parameters1.Item("Part1\Hauptkörper\Tropfen." & i & "\Länge") H = length1.Value MsgBox ("Tropfen." & i & " ist vorhanden und hat die Länge " & H & "") Next End If oSel.Clear Exit Sub '--------------------------------------------------------------------------------------- tropfenflansch_Error: Dim errMsg As String Dim errRet As VbMsgBoxResult Select Case Err.Number ' Case 438 ' resume next ' Case -2147467259 'automation error Case Else errMsg = Err.Number & ": " & Err.Description & " in procedure tropfenflansch" errRet = MyMsgBox(errMsg, vbOKOnly, "tropfenflansch") End Select 'Resume Next 'fall thru to quit sub '--------------------------------------------------------------------------------------- End Sub
Tschau, Joe ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |