Du hast Teil 2 noch nicht durchgearbeitet? Hier kannst du das nachholen!
Alle Beiträge der Serie
Im letzten Teil haben wir uns das ThisApplication Objekt angeschaut. Bevor wir weiter machen. bitte zuerst mal den VBA-Editor starten (ALT+F11) und unser Benutzerprojekt laden (wenn du nicht mehr weißt, wie das geht, dann schauen in Teil 2 nach!).
Heute erstellen wir eine Dokumentvariable und befüllen diesen um sie dann näher zu untersuchen. Wir erstellen dazu ein neues Programm mit Namen Dokument. Dazu tippen wir unterhalb des letzten Programmes Sub Dokument und dann Enter. Das ergibt:

Jetzt definieren wir eine Variable, also einen leeren "Behälter" der Inhalte aufnehmen kann. Wir haben im ersten Teil bereits eine Variable definiert mit Namen "Version" (Dim Version). Wenn wir uns eine Variable als einen Behälter oder Tasche vorstellen, die Inhalte aufnehmen kann, so gibt es verschiedenen Typen von Variablen und auch Taschen. Es gibt Reisetaschen, Sporttaschen, Koffer, Taschen für Fallschirme uvm. Jeder dieser Taschen hat andere Eigenschaften und Funktion. Eine Reisetasche hat vielleicht mehrere Fächer und lässt sich mittels Rollen und Henkel ziehen, während der Fallschirmrucksack einen Fallschirm beinhaltet (Eigenschaft) und wenn man an einer Leine zieht kommt der raus (Funktion). Und eben solche Eigenschaften und Funktionen haben Variablen (meist) auch. Wir haben im ersten Beispiel mittels Dim Version zwar eine Variable erstellt, ihr aber nicht genau gesagt, was für eine Art Variable es ist (ich wollte die Sache einfach halten). Das wollen wir jetzt ändern. Wir definieren eine Variable vom Typ Dokument, d.h. diese Variable kann ein Inventordokument enthalten mittels Dim Dok as Document. Wir haben also eine Variable (Taschen) namens Dok von Typ Document.

Bisher ist die Variable leer. Wir wollen sie befüllen und zwar mit den aktuell im Inventor aktiven Dokument. Dazu greifen wir auf das Objekt ThisApplication zurück und darin auf ActiveDocument (du erinnerst dich noch an Teil 2?). Zuweisungen funktionieren mittels Set und = also Variable namens XXX = Inhalt, der zugewiesen werden soll.
Wir tippen also Dok = ThisA - dann wie gehabt STRG+Leertaste und ThisApplication auswählen, Punkt tippen und in der Liste ActiveDocument auswählen.

Jetzt erstellen wir eine Überwachung (Watch) für die Variable Dok, indem wir sie markieren, die rechte Maustaste drücken, Add Watch... aus dem Kontextmenü wählen und den folgenden Dialog mit OK bestätigen. In der Watchliste wir die Variable ergänzt. Sollte das Watch-Fenster nicht angezeigt werden, im Menü View oben den Eintrag Watch Window wählen. Dann den Eingabencursor in die Zeile End Sub stellen und F9 drücken. Es wird ein Haltepunkt erstellt, an dem die Programmausführung pausiert wird.

Jetzt öffnen wir eine Bauteildatei im Inventor und starten dann das Programm (F5) und klappen im Watchfenster die Variable Dok auf.

Dort sehen wir alle Eigenschaften der Variable vom Typ Document, z.B. den Name, der im Baum im Inventor angezeigt wird, den DisplayName. (Info am Rande: In der Spalte "Type" ist der Typ der Eigenschaft zu sehen. Bei DisplayName ist das "String", was für Text steht).
Wir machen nun eine Meldungsbox, in der dieser Displayname angezeigt wird. Dazu schreiben wir msgbox (Dok.DisplayName), wobei auch hier nach dem tippen des Punktes die Liste zur Verfügung steht. Sollte das Programm noch laufen und am End Sub stehen (gelb hinterlegt) dann mittels F5 das Programm vollständig ausführen lassen. Es greifen wir die gleichen Funktionen wie bisher auch, also z.B. nach dem Punkt hinter Dok kommt die Liste mit den Eigenschaften.

So sieht es fertig aus:

Mit F5 starten und die Meldungsbox bestaunen, die erscheint und mit OK schließen, sonst können wir nachher nichts mehr in Editor tippen.

Jetzt machen wir was total verrücktes, wir ändern den Displayname :) Dazu müssen wir der Eigenschaft Displayname einen neuen Text zuweisen. Das sieht dann so aus: Dok.DisplayName = "Ich heiße jetzt anders"

Den Haltepunkt bei End Sub können wir entfernen in dem wir den Cursor in die Zeile stellen und F9 drücken. Die rote Hinterlegung verschwindet. Jetzt starten wir das Programm wieder, bestätigen die Meldungsbox und schauen mal oben in den Browserbaum im Inventor.

Tatsächlich steht da jetzt der Text, den wir der Eigenschaft DisplayName zugewiesen haben. Jetzt ändern wir die Programmzeile auf Dok.DisplayName = "" d.h. wir setzen den Displayname auf "leer" und starten das Programm wieder.

Zuerst wird der neu, beim letzten Programmlauf geänderte Displayname anzeigt bevor er wieder geändert wird, dieses mal eben auf "". Wenn wir in den Bau schauen, sehen wir, das der Inventor den Displayname wieder gleich dem Dateinamen gesetzt hat.
wir wollen die beiden Zeilen Msgbox... und Dok.DisplayName nicht mehr ausführen ohne sie aber zu löschen, d.h. wir kommentieren sie aus in dem wir ein ' an den Anfang der Zeile setzen.

WICHTIG: Kommentare sind in Programm sehr wichtig, wenn die Programme länger werden, weil man dort Hinweise schreiben kann, warum man was im Programm macht!
Bisher haben wir auf Eigenschaften zugegriffen. Jetzt wollen wir uns Funktionen des Objekts "Document" anschauen. Dazu schreiben in eine neue Zeile Dok. und schon kommt wieder die Liste mit den Eigenschaften. Tippen wir nun sa um zu den Einträgen zu springen, die mit sa beginnen, finden wir einen Eintrag Save, der ein grünes Symbol vorne hat. Die Einträge mit den grünen Symbolen nennt man Methoden, während die mit der kleinen Hand die bereits bekannten Eigenschaften sind. Methoden sind also "Funktionen" die etwas mit dem Objekt machen, es z.B. speichern.

Das Programm sieht so aus:

Wird es gestartet, wird das aktuelle Inventordokument gespeichert, so wie wenn wir auf den Speichernknopf klicken würden. Schauen wir uns an, welche Eigenschaften und Methoden so ein Dokumentobjekt hat. Dazu stellen wir den Eingabecursor auf das Wort Document oben in der Zeile "Dim Dok as Document" und drücken F1. Sollte diese Box erscheinen, wählen wir den ersten Eintrag und drücken auf den Knopf "Help".

Die Programmierhilfe des Inventors wird geöffnet und es werden Informationen zum Objekt Document angezeigt.

Wir sehen eine Liste mit "Methods" das sind die "Funktionen" oder wie es richtig heißt Methoden, die ein Objekt hat und weiter unten die Properties (Eigenschaften). Leider gibt es diese Hilfe nicht auf Deutsch, aber Englisch können wir ja alle, oder :)
Hinter jedem Eintrag in der Tabelle ist eine Beschreibung zu finden. Klickt man auf den blauen Begriff wird eine detailierte Hilfeseite dazu geöffnet.

Ist jemand aufgefallen, das es die Methoden Save, Save2 und Saveas gibt? Save und Saveas sind denke ich klar (Speichern und Speichern unter) aber save2? Was steht in der Hilfe?

Save2 speichern also nicht nur das aktuelle Dokument sondern auch abhängige Dokumente. Bei einer Baugruppe also auch Komponenten in der Baugruppe.
Schauen wir uns Saveas in der Hilfe an:

Wenn wir unter Syntax schauen, sehen wir, das Savas noch weitere Angaben braucht. Zum einen ist das der Dateiname (Klar, speichern unter in Inventor aufgerufen fragt ja auch einen neuen Dateinamen ab). Zudem muss die Frage beantwortet werden, ob es sich um Speichern unter oder Kopie Speichern unter handelt, das sind (wie hoffentlich bekannt) in Inventor 2 unterschiedliche Funktionen.

Will man aus einer IPT eine STEP Datei machen, nutzt man Kopie speichern unter. Zudem bleibt bei Kopie speichern unter das aktuelle Dokument geöffnet.
Wir wollen nun unser Bauteil als DWF-Datei abspeichern. Dazu müssen wir vorher einen Ordner suchen, in den wir Schreibrechte haben. Dafür müssen wir einen gemeinsamen Nennern finden, der bei euch allen, egal welche Rechte ihr unter Windows habt, funktioniert. Wir nehmen c:\users\public was c > Benutzer > Öffentlich entspricht.

Um eine DWF zu speichern brauchen wir die Funktion Kopie speichern unter!
Wir schreiben also: Dok.save2 ( und wieder bekommen wir einen Hilfe, welche Argumente wir zusätzlich angeben müssen.

Nach der Klammer muss also der Dateiname inkl. Pfad kommen (das ist ein Text als hat die Angabe den Typ "String") dann ein Komma und dann die Angabe ob Speichern unter oder Kopie speichern unter und zwar als boolsche Angabe, d.h. es gibt wahr oder falsch (True oder False).
Als kleines Schmankerl soll bei der Pfadangabe der Pfad zwar fix sein (c:\users\public) der Dateiname soll aber dem Displayname entsprechen zzgl. der Endung dwfx. Wir müssen den Pfad also aus einem fixen Text und einer Eigenschaft des Dokuments zusammensetzen, bzw. aus 2 Strings (auch DisplayName ist vom Typ String siehe oben!). Das macht man mit dem &. Der String sieht also wie folgt aus:
"c:\users\public\" & Dok.DisplayName & ".dwfx"
Nach dieser Eingabe tippen wir ein Komma und schon fragt der Inventor ab, ob die zweite Angabe True oder False ist. Wir wollen KOPIE speichern unter (nur da kann man DWFX erstellen!) also TRUE. So sieht die Zeile aus.

Sieht richtig aus, ist aber trotzdem rot. Wenn man Methoden aufrufen will, muss man vorne ein Call stellen. So ist es also richtig:

Wenn wir jetzt unser Programm ausführen, wird die in das angegeben Verzeichnis eine DWF-Datei des aktuelle Modells gespeichert.

Jetzt haben wir ein Programm, das beim Ausführen vom aktuellen Dokument eine DWFX-Datei erstellt. Wir wollen das etwas verändern. Ist die Datei eine IPT oder IAM wollen wir eine DWF-Datei bei einer IDW aber eine PDF. Dazu brauchen wir was in der Form: Wenn Dateityp IPT oder IAM ist, dann Speichern unter als DWF sonst speichern als PDF.
Rufen wir nochmals die Hilfe zum Objekt Document auf und schauen in die Eigenschaften. Dort gibt es eine Eigenschaft DocumentType, welch Glück :)

Der Typ dieser Eigenschaft ist nicht etwa String (Text) sondern DocumentTypeEnum. Klicken wir darauf sehen wir welche Typen es gibt. Wir müssen also abhängig vom Typ unterschiedliche Befehle ausführen, also was mit Wenn > Dann > Sonst oder in der Programmsprache IF ... THEN ... ELSE ... END IF
Wieder erscheint nach dem = eine Auswahl gleich was DocumentType alles sein kann.

Der gesamte Programmblock sieht so aus:

Ich habe die Befehle (Call ...) innerhalb der Wenn - Dann - Sonst Struktur eingerückt. Das verbessert die Lesbarkeit des Programmcodes ungemein! Einfach Erst die TAB-Taste drücken und dann lostippen! Nochmals der Block in unserer Sprache:
WENN Dokumenttyp = IAM ODER Dokumenttyp = IPT DANN
RUFE AUF Methode ....
SONST
RUFE AUF Methode ....
ENDE WENN
Das soll es bis hier gewesen sein! Hausaufgabe bis zum nächsten mal: Schreibe ein Programm das bei einer IPT eine STP erstellt, bei einer IAM eine DWFX und bei einer IDW eine PDF. (Kleiner Tipp: Es geht auch IF ..... THEN ...... in einer Zeile ohne Else und End if) Rufe dazu auch mal die Hilfe zum Befehl if auf!
Weiter zu Teil 4