Teil 7 verpasst? Dann erstmal hier weiter!
Im letzten Teil haben wir uns mit der Fehlerbehandlung innerhalb unserer Programme gekümmert, einem sehr wichtigen Thema! Um die Beispiele weiterhin einfach zu halten, werde ich aber in den weiteren Programmen darauf verzichten. Ihr wisst jetzt ja, was bei einem normalen Programm für die freie Wildbaren zu tun ist.
Heute schauen wir uns an, wie wir Mehrfachänderungen mittels eines Rückgängigbefehls rückgängig machen können. Wie brauchen dazu als Ausgangspunkt unser Programm aus dem Teil 6, das wir zum (un-)sichbar schalten von Skizzen in Bauteilen innerhalb einer Baugruppe genutzt haben. Wer das Programm nicht mehr hat, schaue in Teil 6 nach. Zuerst wieder den VBA-Editor starten und unser Benutzerprojekt laden. Dort sollten wir das Programm SkizzeUnsichtbar finden. Damit das ganze funktioniert, brauchen wir wieder eine Baugruppe.
Wenn wir das Programm ausführen und alle Skizzen sichtbar schalten funktioniert das zwar hoffentlich gut. Wer nach dem Programmende aber auf den Rückgängigknopf im Inventor betätigt, wird feststellen, das jeder Skizzen einzeln wieder unsichtbar wird. Wurden z.B. 20 Skizzen sichtbar gemacht, so muss 20x Rückgängig gemacht werden. Das lässt sich verhindern, indem wir die gesamte Transaktion "Skizzen unsichtbar machen" zu einem "Paket" zusammenfassen. Dazu brauchen das Objekt Transaction, das wir definieren und dem wir dann wie gehabt was zuweisen.
Dim oTrans As Transaction
Set oTrans = ThisApplication.TransactionManager.StartTransaction(oAsmDoc, "Skizzensichtbar")
oAsmDoc entspricht hier dem Objekt, das die Baugruppe enthält (Haben wir oben der aktuelle Baugruppe zugewiesen!). "Skizzensichtbar" ist der Name der Transaktion.
Dann kommt der Programmablauf, den wir zu einer Transaktion zusammenfassen wollen, also in unserem Fall die Schleifenkonstruktion For Each....
Wenn die Schleife durch ist, dann beenden wir die Transaktion durch ein oTrans.End.
Stellt sich noch die Frage, wo die Zeilen innerhalb unseres Programmes stehen sollten? Hier habe ich Sie platziert:
Dann können wir nun ausprobieren, ob das ganze funktioniert. Schließe die IAM ohne zu speichern und öffne sie wieder. Starte das Programm, mach alle Skizze sichtbar und klicke dann auf Rückgängig. Jetzt sollte alles, was das Programm gemacht hat, mit einem Klick rückgängig gemacht sein. Hier der vollständige Programmcode.
Public Sub SkizzeUnsichtbar1() Dim oAsmDoc As AssemblyDocument Set oAsmDoc = ThisApplication.ActiveEditDocument Dim oRefDocs As DocumentsEnumerator Set oRefDocs = oAsmDoc.AllReferencedDocuments Dim oRefDoc As Document Dim Antwort Dim wfBoolean As Boolean wfBoolean = False Antwort = MsgBox("Alle Skizzen Sichtbar (Ja) oder Unsichtbar (Nein)", vbYesNo) If Antwort = vbYes Then wfBoolean = True If Antwort = vbCancel Then Exit Sub Dim osketch As PlanarSketch Dim oTrans As Transaction Set oTrans = ThisApplication.TransactionManager.StartTransaction(oAsmDoc, "Skizzensichtbar") For Each oRefDoc In oRefDocs If oRefDoc.IsModifiable = True And oRefDoc.DocumentType = kPartDocumentObject Then For Each osketch In oRefDoc.ComponentDefinition.Sketches osketch.Visible = wfBoolean Next End If Next oAsmDoc.Update oTrans.End End Sub
Das soll es für heute gewesen sein, Bis zum nächsten mal. Eine viel bessere, umfangreichere Beschreibung zu Thema Transaction findet ihr übrigens hier, falls ihr das Thema vertiefen wollt. Schaut euch vorallem an, was dort zum Thema Errorhandling und Transaction beschrieben wird.
Sehr schön danke!
AntwortenLöschenset --- Befehl in Inventor 2019 nicht mehr unterstützt
AntwortenLöschenWie kommst du darauf? Kann es sein, daß du den Code in ILOGIC nutzt?
LöschenSchau dir mal das an https://inventorfaq.blogspot.com/2017/04/vba-code-in-ilogic-code-umwandeln.html
Löschen