Die Inventor FAQ wird unterstützt von:

Inventor FAQ Logo

27.03.2017

Inventor automatisieren: Programmieren für Konstrukteure (Teil 12)

Teil 11 verpasst? Dann hier weiter!

Alle Beiträge der Serie

Im letzten Teil habe wir uns mit den iProperties beschäftigt. Dazu habe ich letzte Woche auch ein weiteres Codebeispiel gepostet.

Diese Woche schauen wir uns einige grundlegende Dinge bzgl. VBA an. Das beste Programm nutzt nichts, wenn wir es nichts in die Oberfläche bekommen, damit der Anwender es auch aufrufen kann.

Einstellungen

Bisher haben wir unsere Programme in eine gesonderte IVB-Datei gespeichert, die wir jedes mal landen mussten, wenn wir auf unsere Programme zugreifen wollten. Inventor lädt beim starten auch eine Vorgabe-IVB-Datei, die im Standard default.ivb heißt. Welche Datei konkret geladen wird, ist in den Anwendungsoptionen im Register Dateien zu finden.

image

Wenn in einer Firma alle auf die gleiche Programmierung zugreifen sollen, macht es natürlich Sinn (wie bei den Vorlagen und den Design Data auch) eine gemeinsame Datei zu verwenden, damit alle Anwender auf den gleichen (aktuellsten) Stand zugreifen. Wenn du also eine IVB-Datei mit Programmen für deinen Firma erstellt haben, dann sollte bei allen Anwendern dort der Pfad zu dieser Datei sein.

WICHTIG: Es gibt eine wichtige "Einschränkung" bzgl. dieser Einstellung. Üblich ist bei einer gemeinsamen Nutzung innerhalb der Kostruktionsabteilung sicherlich, die Datei auf einen gemeinsamen Netzwerkpfad zu legen. Da gibt es aber eine Einschränkung. Nur der Anwender, der die IVB-Datei durch den Start des Inventor als erster lädt, kann die Datei bearbeiten! Ein anderer Anwender kann im VBA-Editor zwar Veränderungen in der IVB-Datei machen, beim Versuch zu speichern kommt aber die Meldung, das das nicht geht.

image

Das kann zu einem Problem werden, wenn man "mal schnell" etwas ändern will und dann seine Änderung nicht speichern kann. Mögliche Abhilfen:

  1. ALLE machen den Inventor zu (auch du selbst!) und dann startest du als erster den Inventor neu
    ODER
  2. Du kopierst die IVB-Datei Datei, lädst die Kopie in den IVB-Editor, machst dort deine Änderungen und überschreibst mit deiner Kopie die Original-IVB-Datei wenn alle anderen aus dem Inventor raus sind.

Das Problem kannst du natürlich umgehen, wenn jeder Anwender seine "eigene" IVB-Datei einsetzt. Damit die bei jedem gleich ist, musst du dafür sorgen, dass irgendein Automatismus die lokale IVB-Datei durch den aktuellen Stand ersetzt. MUM FN Kunden haben dafür das CAD Starttool das optional die Möglichkeit bietet, beim Starten eine zentrale IVB-Datei lokale auf den PC kopiert und im Inventor wird auf diese lokale Kopie verwiesen. Eine Batchdatei im Windows-Autostart die mittels Copy die zentrale IVB-Datei beim Windowsstart lokal kopiert tut's in dem Fall auch.

Icons in die Oberfläche

Der normale Anwender will natürlich nicht immer in den VBA-Editor wechseln um ein Programm auszuführen, weswegen es natürlich wichtig ist, das jedes Programm einen Knopf in der Oberfläche bekommt. Der einfache, schnelle Weg: Einfach die Benutzeroberfläche anzupassen und die Makros in der gewünschten Umgebung (Bauteil, Baugruppe, Zeichnung) integrieren.

Damit wir mit unseren bisherigen Programm etwas spielen können, stellen wir unsere IVB-Datei in den Anwendungsoptionen als Standard-IVB-Datei.

image

Nach dem Speichern der Änderung und dem Schließen des Dialogs wird die neue IVB-Datei als Standard-IVB geladen und stellt uns die bisherigen Programme zur Verfügung. In die Oberfläche bekommen wir ein Programm wie folgt:

  1. In der gewünschte Umgebung (IPT, IAM, IDW) RMT auf ein Icon > Benutzerbefehle anpassen
    image
  2. Oben Makro wählen. Ergibt unten rechts in der Liste alle Makros. Makro wälhlen und Pfeilknopf (>>) drücken. Ggf. den Button auf groß setzen und auf alle den Text anzeigen (Haken setzen) weil wir keine Iocns definiert haben und der Anwender die Befehle nur anhand des Textes unterscheiden kann.
    image
  3. Ergibt einen Benutzerwerkzeugkasten
    image

Wie bereits beschrieben, haben alle Buttons das gleiche Icon (diese liegende 8 oder auch das Symbol für unendlich, das ganz typisch für alle Microsoft Entwicklungswerkzeuge ist). Ich habe meistens keine Lust Icons zu machen aber wer mag, kann sich ja probieren. Und so gehts:

Ihr braucht BMP-Datei in der Auflösung 16x16 und 32x32 (einmal kleine und einmal große Icons). Die müsst ihr entweder selbst designen oder auch dem Internet "stehlen". Damit der Inventor den Programme (unsere einzelnen Public Subs) das richtige Icon zuordnen kann, gibt es eine Namenskonvention für den Dateiname der BMP-Datei. Sie sieht so aus:

<Modulname>.<Sub-Name>.<Größe des Icons:small oder large>.bmp

In meinem Beispiel heißt das Modul in der IVB-Datei Module1, der Programmname ist Hallo und ich habe 2 Icons in klein und groß.

image

Die Icon-BMP-Dateien müssen im gleichen Verzeichnis liegen, wie die IVB-Datei.

image

Ergibt nach einem Inventorneustart folgendes Bild:

image

Bei vielen Makros artet das Icon erstellen schnell mal in Arbeit aus. Wer es aber ganz besonders schön machen will, der kann sich hier etwas kreativ austoben.

Speicherorte für VBA-Programme

Wir können VBA-Programme an 3 verschiedenen Orten speichern.

  1. Die Standard-IVB-Datei, wie sie in den Anwendungsoptionen eingestellt ist
  2. Eine IVB-Datei, die bei Bedarf geladen wird (die Benutzerprojekt.ivb Datei, die wir bisher manuell dazu geladen haben). Auch die Inventor FAQ Toolbox nutzt eine eigene IVB-Datei, die beim Start der Toolbox automatisch in den Inventor geladen werden.
  3. Jede Inventordatei (IPT,IAM, IDW, DWG, IPN) kann eigene Module enthalten.

image

WICHTIG: Es ist in aller Regel keine gute Idee, in einer Inventordatei einen Makro zu speichern, der auch für andere Dateien genutzt werden kann. Früher gab es mal eine Möglichkeit, automatisch beim speichern einer Datei, einen Makro auszuführen. Diese Möglichkeit gibt es seit einigen Inventorversionen nicht mehr. Ein Makro innerhalb einer Datei macht eigentlich nur noch Sinn, wenn er nur für diese Datei nützlich ist.

Programm innerhalb von VBA aufrufen

Innerhalb eines Programmes lässt sich ein anderes Programm aufrufen.

Fall 1: Im gleichen Modul

Im ersten Fall sind die Programme im gleichen Modul. Um das durchzuspielen, erstellen wir in unserem Benutzerprojekt (das momentan auch Anwendungsprojekt ist), ein neues Modul.

RMT auf den Ordner Modules > Insert > Module

image

Das eingefügte Modul kann durch anklicken und der Änderung des Namens unten im Bereich Properties geändert werden.

image

Wir machen nun in diesem Modul 2 Programme. Public Sub PRG1 und Public Sub PRG2 die jeweils eine Msgbox mit "1" oder "2" öffnen

image

Jetzt wollen wir in PRG1 das Programm PRG2 ausführen. Das erreichen wir über ein Call <Sub-Name>.

image

Wird PRG1 ausgeführt, wird die Messagebox mit 1 angezeigt und im Anschluss eine zweite Box mit einer 2.

Fall 2: In einem anderen Modul

Es gibt auch die Möglichkeit, aus einem Modul Programme aus einem anderen Modul aufzurufen. Zum Testen legen wir ein weiteres Modul an namens TEST2. Darin legen wir eine Private Sub (keine Public sub!) an.

Um nun aus dem Modul TEST1 das Programm PRG1 aufzurufen, geben wir an: Call <Modulname>.<Public Sub Name>

Wir bekommen sogar die Sub-Name in der Autovervollständigung angezeigt nachdem wir call TEST1. geschrieben haben.

image

Wird PRG3 ausgeführt, kommt Meldung 3, danach wird PRG1 ausgeführt, das Meldung 1 anzeigt und PRG2 startet, die Meldung 2 anzeigt.

Versuchen wir aus Modul TEST1 und PRG2 TEST2.PRG3 aufzurufen, geht das nicht, weil Private Subs nun innerhalb des Modules aufgerufen werden können.

Das geht:

image

Das geht nicht:

image

Module exportieren

Module lassen sich über einen Rechtsklick > Export File in eine Textdatei mit der Endung BAS exportieren und über Import File auch wieder laden. Remove löscht ein Modul.

image

VBA-Projekt schützen

VBA-Projekte lassen sich gegen Änderung und Codediebstahl schützen, indem man aus dem Kontextmenü oben <IVB-Projektname> Properties... wählt. Im folgenden Dialog lässt sich ein Passwortschutz einrichten der das VBA-Projekt vor der Anzeige schützt. Am besten lasst ihr das weg, den wen das Passwort weg ist, wird es mit dem Zugriff schwer. Es gibt VBA-Passwortknacker für MS Office-VBA-Projekte. Für den Inventor habe ich noch keines gefunden, d.h. Passwort weg = Codezugriff weg!

image

Verweise (Referenzen)

Wir können aus Inventor-VBA heraus auch auf andere Programme zugreifen und diese steuern. Um in unser VBA-Projekt die Unterstützung für ein Programm zu integrieren, muss wir einen Verweis laden, eine Art "Unterstützungsprogramm" das uns die Objekte, Methode und Eigenschaften zur Verfügung stellt. Verweise geladen werden im VBA-Editor über Tools > References

image

In folgenden Dialog muss z.B. der Eintrag für Microsoft Excel ergänzt werden, wenn wir aus unserem VBA-Projekt ein Excel starten wollen um z.B. Daten zwischen dem Inventor und Excel auszutauschen (Die andere 4 Verweise sind bereits standardmäßig aktiviert).

image

Hier ein Beispielprogramm, das Excel startet und eine Exceldatei lädt.

image

Fehlt der Verweis zu Microsoft Excel 15.0 Object Library, kommt eine Fehlermeldung beim Ausführen des Programms.
Compile error: User-defined type not defined


image

Solltet ihr also diese Meldung bekommen in einer Zeile, wo ein Objekt definiert wird, dann kommt es oft daher, das der Verweis zu der Referenz des Objektes fehlt.

Das soll's für heute gewesen sein. Viel Theorie aber dass muss auch sein. Bis zum Nächsten mal!

Weiter zu Teil 13!

Keine Kommentare:

Kommentar veröffentlichen

War der Beitrag hilfreich oder hast du eine Ergänzung dazu?
Ist noch eine Frage offen?
Ich freue mich auf deine Rückmeldung!

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.

Related Posts Plugin for WordPress, Blogger...
Inventor FAQ Newsletter. Emailadresse: