Forum:Inventor VBA
Thema:Try & Catch in VBA?
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge verwalten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
mb-ing

Beiträge: 605 / 0

Inventor 2013, WIN 10 (64bit), Dell Precision T1650, 16GB (PSP 2011 Pro)

Hallo zusammen,

wie realisiert Ihr Try & Catch in VBA?

Macht Ihr es auch so wie:
http://ww3.cad.de/foren/ubb/Forum50/HTML/033235.shtml (3. Beitrag von Lothar Boekels)
https://stackoverflow.com/questions/44638867/vba-excel-try-catch/44638899

Es wäre praktisch das, wie in Java, in VBA zu haben, da man Objekte in einer Collection wesentlich schneller mit Ihren Namen ansprechen kann.
Ist es nicht vorhanden, gibt es natürlich einen Fehler, der behandelt werden will ^^

Ist eine Sprungmarke (On Error goto) überhaupt robust? Oder sogar verpönt?
Wie kommt man nach der Sprungmarke wieder in den normalen Programmfluss? Wieder eine Sprungmarke? 

Wird die Zeile "If Err.Number <> 0 Then" immer erreicht oder kann es sein, dass das Programm bei gewissen Fehlern vorher abbricht?


Bisher habe ich eine Collection immer "durchiteriert" (For Each … in … ) und einen boolean-Wert auf true gesetzt, wenn das Element gefunden wurde...
(Also im Endeffekt eine ausgelagerte Funktion in einer abstrakten Klasse (Public not creatable), der eine Collection und ein String übergeben wird und ein boolean-Wert zurückgibt.)
Aber das ist vermutlich nicht sehr elegant 

Daher würde mich interessieren, wie Ihr das bei Euch realisiert.

Danke im Voraus für Eure Anregungen.

Danke und Grüße
MB-Ing.

------------------
Wissen ist Macht. Nichts wissen macht auch nichts 

rkauskh

Beiträge: 1651 / 0

Windows 10 x64, AIP 2021

Moin

VBA bietet nur die genannten Möglichkeiten.
Zurück kommt man mit einer zweiten Sprungmarke. Das macht das Ganze mit zunehmender Zahl "spannend". 
Öhm, also ich hab es geschafft das "If Err.Number <> 0" nicht erreicht wird, z.B. indem mein Code den Inventor vorher zum Absturz gebracht hat.
Wenn du in eine Function auslagerst, gibt doch statt einem Boolean gleich das gesuchte Objekt zurück. Das vorzeitige Verlassen der Funktion im Falle eines erfolgreichen Tests kann die Laufzeit verkürzen.


Code:
Public Function test(ByVal oOccs As ComponentOccurrences, ByVal sName As String) As Document
   
Dim oOcc As ComponentOccurrence

For Each oOcc In oOccs
    If oOcc.Name = sName Then
        test = oOcc.Definition.Document 'das gesuchte Objekt
        Exit Function
    End If
Next
           
End Function


------------------
MfG
Ralf

mb-ing

Beiträge: 605 / 0

Inventor 2013, WIN 10 (64bit), Dell Precision T1650, 16GB (PSP 2011 Pro)

@Ralf:

Vielen herzlichen Dank für Deine Antwort.
Die ausgelagerte Funktion liefert mir einen bool'schen Wert zurück und kein Objekt, da ich manchmal nur wissen möchte, ob etwas vorhanden ist 
Ist bisschen universeller....
Vielleicht baue ich mir eine zweite Funktion, die gleich das Objekt zurückgibt.

Also Sprungmarken führen mich nicht zu meinem Ziel.
Kann man sich ggf. eine eigenständige Funktion oder Klasse für Try & Catch bauen?
Hmm, wie soll die dann ausschauen? 

Wie lösen andere Kollegen die Anforderung?

Danke und Grüße
MB-Ing.

------------------
Wissen ist Macht. Nichts wissen macht auch nichts