Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Try & Catch in VBA?

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:   Try & Catch in VBA? (310 mal gelesen)
mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


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

Beiträge: 586
Registriert: 06.09.2012

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

erstellt am: 16. Apr. 2020 10:51    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,

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 

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik


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

Beiträge: 1594
Registriert: 15.11.2006

Windows 10 x64, Inventor 2020

erstellt am: 17. Apr. 2020 05:24    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 mb-ing 10 Unities + Antwort hilfreich

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

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

mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


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

Beiträge: 586
Registriert: 06.09.2012

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

erstellt am: 20. Apr. 2020 14:33    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

@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 

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)2020 CAD.de | Impressum | Datenschutz