Teil 10 verpasst? Dann hier weiter!
Letzte Woche haben wir unseren Programmierwerkzeugkasten um ein kleines Programm erweitert, das Informationen zum aktuellen Dokument bzw. dem in Inventor gewählten Element anzeigt. Dazu kamen noch zwei kleinere Programme, mit denen wir Bemaßungen manipuliert haben.
Wie immer zuerst: VBA-Editor öffnen und unser Benutzer-VBA-Projekt laden.
Zuerst schauen wir uns mal die iProperties in einer Datei an. Dazu öffnen wir eine Inventordatei, wählen nichts aus und rufen unser Objektuntersuchungsprogramm auf.
Wir sehen, das jede Inventordatei einen Eintrag PropertySets hat, der wiederum 4 Item enthält, die für die verschiedenen Register im iPropertydialog stehen. Item 4 sind z.B. die benutzerdefinierten iProperties.
Darin enthalten sind wiederum Items, wobei jeden Item für eine (Benutzer-) iProperty steht. Im meinem Screenshot oben finden wir z.B. das Benutzer-iProperty Druckbenutzer.
Die Struktur sieht also so aus:
PropertySets (Summe aller iProperties)
- Propertyset (Gruppe von Properties, z.B. alle Benutzer-iProperties)
- Property (das einzelne Property, wie z.B. Bauteilnummer oder eben das Benutzer-iProp. Durckname)
Hier unser erstes Programm:
Public Sub iPropLesen1() 'Wie immer Dokumentobjekt definieren Dim doc As Document Set doc = ThisApplication.ActiveDocument 'Jetzt kommt der Verweis auf den Satz iProperties mit dem Name: Inventor User Defined Properties 'Siehe dazu Screenshot oben im Text. Den Name haben wir bei unsere Untersuchung rausgefunden! Dim PropSet As PropertySet Set PropSet = doc.PropertySets.Item("Inventor User Defined Properties") 'Objektdefinition für ein einzelnes iProperty. Verwendet wird das Objekt unten in der 'For Each Schleife Dim prop As Property 'Durch alle Properies im PropertySet "Inventor User Defined Properties" gehen 'und mittels Debug.Print Propertyname und Wert in einem Direktfenster ausgeben For Each prop In PropSet Debug.Print prop.Name & ":" & prop.Value Next End Sub
Was im Code passiert, habe ich in den Kommentaren beschrieben. Wird das Programm gestartet, werden alle Benutzer-iProperties im Direktfenster ausgegeben.
Jetzt ergänzen wir das Programm um einen weitere Schleife, in der wir durch alle Propertysets gehen.
Public Sub iPropLesen1() 'Wie immer Dokumentobjekt definieren Dim doc As Document Set doc = ThisApplication.ActiveDocument 'Jetzt kommt der Verweis auf den Satz iProperties mit dem Name: Inventor User Defined Properties 'Siehe dazu Screenshot oben im Text. Den Name haben wir bei unsere Untersuchung rausgefunden! Dim PropSet As PropertySet 'Die Zeile kann weg, wir wollen ja durch alle Propertysets gehen 'Set PropSet = doc.PropertySets.Item("Inventor User Defined Properties") 'Objektdefinition für ein einzelnes iProperty. Verwendet wird das Objekt unten in der 'For Each Schleife Dim prop As Property 'Durch alle ProperySets im Doc-oBjekt gehen For Each PropSet In doc.PropertySets 'Durch alle Properies im PropertySet "Inventor User Defined Properties" gehen 'und mittels Debug.Print Propertyname und Wert in einem Direktfenster ausgeben For Each prop In PropSet Debug.Print prop.Name & ":" & prop.Value Next Next End Sub
Der Code ist um eine weitere For Each Schleife ergänzt worden, bei dem durch alle ProperySets gegangen wird. Im Ausgabenfenster finden sich nun alle iProperties in der Datei. Übrigens auch welche, die im iPropertydialog gar nicht angezeigt werden! (Ihr feste diesen Beitrag jetzt sicher besser, bzw. wisst nun, wo die Namen herkommen)
Was wir noch sehen, ist das Name des iProperties auf englisch dargestellt wird. Das entspricht eben prop.Name. Wir ändern das nun auf prop.DisplayName, was dazu führt, dass der Anzeigename der iProperties benutzt wird, was in dem meisten Fällen zu deutschen anstelle englischer Namen führt.
Das ist mal das erste Rüstzeug, um was mit iProperties zu machen.
Bis zum nächsten mal!
Danke
AntwortenLöschen