VBA für AutoCAD Teil 1

 

 

© Dipl.-Wirtsch.-Ing. Franz Ertl

 

 


Einleitung

Visual Basic for Applications oder kurz VBA ist eine Programmiersprache, die von Microsoft entwickelt wurde. Verschiedene Programmstrukturen wurden aus dem früheren Basic übernommen. Die Entwicklungsumgebung und die Art zu programmieren hat sich aber erheblich geändert. Ein Hauptvorteil gegenüber anderen Programmiersprachen ist die leichte Erlernbarkeit und die Integration in viele Programme. Mit VBA können Sie keine ausführbaren Programme erstellen. Sie können aber VBA-Routinen in Visual Basic übertragen. Die Sprachelemente von VB sind identisch mit denen von VBA. In VBA gibt es aber zusätzliche auf die jeweilige Anwendung bezogene Elemente. Zum Beispiel finden Sie in Microsoft Excel das Objekt „Cell“, das es in Autocad nicht gibt.  In AutoCAD gibt es das Objekt Acad_Text, das es in Excel nicht gibt. Um in VB mit diesen Objekten arbeiten zu können, müssen Verweise erstellt werden. Sie erfahren mehr im Kapitel „Modul einfügen“.

Dieses Skript ist kein allumfassendes Nachschlagewerk, sondern eine Sammlung von Übungen, mit dem Ziel „VBA - Learning by doing“.

Verwenden Sie zur Vertiefung die Hilfe (Entwicklerhilfe).


Einführung in die VBA-Programmierung

Folgende Fragen werden in diesem Kapitel beantwortet:

Ereignisgesteuerte Programmierung

VBA ist eine ereignisgesteuerte Programmiersprache. Das bedeutet, dass beim Eintritt bestimmter Ereignisse Programmcode ausgeführt werden kann.

Wenn Sie ein Benutzerformular erstellt haben, gibt es dort eine Reihe von Ereignissen, die Sie auch in den VBA-Formularen der Microsoft Office-Anwendungen finden.

Ereignis                                       Wird ausgelöst beim

Click                                             Anklicken einer Schaltfläche u.a.

DblClick                                        Doppelklicken einer Schaltfläche u.a.

Enter                                            Hingehen zu einer Schaltläche u.a.

Exit                                              Verlassen einer Schaltfläche u.a.

KeyDown                                      Drücken einer Taste über der Schaltfläche u.a.

KeyPress                                      Gedrückthalten der Taste über der Schaltfläche u.a.

KeyUp                                          Loslassen der Taste über der Schaltfläche u.a.

MouseDown                                  Drücken der Maustaste über der Schaltfläche u.a.

MouseMove                                  Bewegen der Maus über die Schaltfläche u.a.

MouseUp                                      Lösen der Maustaste über der Schaltfläche u.a.


Ereignisse in AutoCAD

Es gibt aber auch eine Reihe von anwendungsspezifischen Ereignissen.

Der Benutzer öffnet eine Zeichnung, dadurch wird in AutoCAD das Ereignis BeginOpen ausgelöst. Wenn Sie das Programmfenster von AutoCAD anklicken, wird das Ereignis AppActivate ausgelöst. Zu Beginn des Speichervorgangs wird das Ereignis BeginSave ausgelöst.

Objekte, Klassen und Instanzen

Objekte sind die Elemente von AutoCAD. Zur Definition eines Kreises müßte jedesmal anhand der Kreiszahl und der Formel 2pr das Objekt berechnet werden, um es in AutoCAD zu erstellen.  Weil das relativ umständlich wäre, gibt es eine Klasse "AcadCircle", welche die Eigenschaften Radius, Center usw. besitzt. Das Objekt Kreis wird aus der Klasse AcadCircle erstellt und erhält seine physische Ausprägung (Darstellung am Bildschirm) erst während der Laufzeit. Diese Darstellung wird als Instanz bezeichnet.

Jede Instanz eines Objekts hat einen eindeutigen Bezeichner die ObjectID, diese bleibt über die Laufzeit der AutoCAD-Sitzung bestehen. Vorsicht: Eine eindeutige ID wird durch „handle“ abgefragt. Diese Eigenschaft bleibt über die Sitzung hinaus erhalten.

Eigenschaften

Objekte besitzen bestimmte Eigenschaften.

Die Eigenschaften eines Kreisobjekts sind

Die Gesamtübersicht finden Sie in der AutoCAD-Hilfe oder im Anhang.

Methoden

Auf Objekte können Methoden angewendet werden. Methoden beantworten die Frage: "Was kann ich mit dem Kreis machen?"

Zu diesen Methoden zählen


Module

Module beinhalten den Programmcode. Sie können in einem Modul viele verschiedene Prozeduren speichern. Es gibt 2 Arten von Modulen. Standardmodule und Klassenmodule.

Standardmodule

In Standardmodulen wird der Programmcode abgelegt, welcher von verschiedenen Formularen aus aufgerufen werden soll. Das Standardmodul ist öffentlich und dadurch innerhalb des Projekts von überall her ansprechbar. Wenn Sie in AutoCAD ein neues Makro erstellen (Alt+F8...), wird der Programmcode automatisch in einem Standardmodul abgelegt.

Der Name des Moduls ist frei wählbar, er darf aber in einem Projekt nur einmal vorkommen. Wenn bereits ein Modul, Projekt oder eine Objektbibliothek mit diesem Namen existiert, erhalten Sie die unten dargestellte Fehlermeldung.

Klassenmodule

Klassenmodule sind die Basis der objektorientierten Programmierung. Hier werden neue Objekte definiert, die Methoden und Eigenschaften besitzen.

Dadurch kann die Funktionalität von AutoCAD um neue Zeichnungsobjekte erweitert werden. Die Definition wird mit dem Schlüsselwort New erreicht.

DIM objTest as New clsMeinObjekt

In Klassenmodulen können ActiveX-Steuerelemente definiert und API-Funktionen (Advance Programmers Interface bzw. Programmierung der Windows-Umgebung) aufgerufen werden.

Schauen Sie mal auf der Seite www.activevb.de nach. Dort finden Sie eine tolle Sammlung von API-Funktionen.

Userform

Es gibt eine Reihe verschiedener Bezeichnungen für Userforms, z.B. Userform, Form, Formular oder das Userformular. Hier wird die Bezeichnung „Formular“ verwendet. 

Es handelt sich um ein Dialogfenster, das dem Anwender zur Verfügung gestellt wird. Sie können dort Steuerelemente, wie Befehls-Schaltflächen oder Kombinationsfelder plazieren. Forms bzw. Formulare werden im Projekt gespeichert. Sie können die Formulare auch exportieren und in andere Projekte wieder importieren.

 

 


Steuerelemente

Zum Ausführen von Befehlen oder zu Anzeige von Werten können Sie auf der Formularfläche Steuerelemente anordnen, die Sie programmieren können.

 

 

Auswahl eines Objekts.

Label: Überschriften, Textinhalte.

*

Ein Textfeld beinhaltet z.B. berechnetee Ausdrucke wie z.B. =2*2  oder berechnete Werte.

*

Kombinationsfeld:  Nachschlagefeld, z.B. für Objekte einer Auflistung. Ein Objekt wird angezeigt.

*

Listenfeld: Ein Listenfeld kann Objekte einer Auflistung beinhalten. Alle Objekte werden angezeigt.

*

Checkbox: Das Feld kann die Zustände Ja/Nein annehmen = True/False = -1/0

*

Optionsfeld: Das Optionsfeld kann mit mehreren anderen Feldern in einem Rahmen kombiniert  werden. Es kann in einer Kombination immer nur ein Feld den Wert True annehmen.

*

Umschalter: Der Schalter wird als aktiviert oder nicht aktiviert dargestellt.

*

Rahmen: Der Rahmen wird häufig für Optionsfelder verwendet. Fügen Sie einen Rahmen ein. Platzieren Sie innerhalb des Rahmens mehrere Optionsfelder. Dadurch werden die Optionsfelder zu einer Gruppe zusammengefasst, so dass nur eine Option aktiviert werden kann.

Befehlsschaltfläche: Zum Ausführen von Programmcode.

*

Register: Erzeugt Registerseiten positionieren.

*

Formular mit mehreren Seiten.

*

Bildlaufleiste: Rollbalken dienen zum Scrollen von Bildschirmseiten.

*

Drehfeld: Drehfelder werden zum Drehen von Objekten verwendet

*

Objekt einfügen: Zum Einfügen von Bildern oder Objekten aus anderen Anwendungen.

 

Prozeduren

Es gibt zwei Arten von Prozeduren

Der Unterschied liegt hauptsächlich darin, dass von einer Function-Prozedur ein Wert zurückgegeben werden kann, von einer Sub-Prozedur nicht.

Aufbau einer Sub – Prozedur

Diese Prozedur ist mit dem Schlüsselwort Public definiert. Wurde dieses Schlüsselwort innerhalb eines Formulars erstellt, kann die Prozedur innerhalb des gesamten Formulars von allen darin gespeicherten Prozeduren aufgerufen werden. Wurde sie in einem Standardmodul erstellt, kann sie in allen Formularen bzw. aus anderen Modulen heraus aufgerufen werden.

Public Sub Prozedurname (Optional Argument1, Optional Argument2 ...)

          Prozedurcode

End Sub

 

Die Alternative wäre die Definition mit dem Schlüsselwort Private, dann ist die Prozedur nur innerhalb des Moduls oder der Prozedur im Formular aufrufbar, in welcher Sie definiert wurde.

Private Sub Prozedurname (Optional Argument1, Optional Argument2 ...)

          Prozedurcode

End Sub

Aufbau einer Function – Porzedur

Public Function Prozedurname (Optional Argument1, Optional Argument2 ...) as Datentyp

          Prozedurcode

End Function

 

Alternativ, wie bei der Sub – Prozedur die Private - Deklaration

Private Function Prozedurname (Optional Argument1, Optional Argument2..) as Datentyp

Prozedurcode

End Function

 


Die Entwicklungsumgebung

Inhalte dieses Kapitels:

Aufrufen des VBA-Editors

Tastenkombination ALT + F11 oder Extras / Macros

 

 

VBA-IDE (Integrated Developer Environment)

 

Projekt speichern

Zum Speichern eines Projekts klicken Sie im Menü Datei "Speichern von..." bzw. die Tastenkombination STRG+S.

Das Projekt umfasst alle Bestandteile des Programms. Die Dateiendung lautet "DVB".

Wenn der Programmcode geändert wurde, fragt AutoCAD beim Beenden, ob das VBA-Projekt ebenfalls gespeichert werden soll. Es geht nicht automatisch.

 


Folgende Objekte können in einem Projekt vorhanden sein:

·                AutoCAD Objekte

·                Formulare

·                Standardmodule

·                Klassenmodule

Datei exportieren/importieren

Mit der Option "Datei importieren..." bzw. exportieren können z. B. einzelne Module oder Formulare einzeln gespeichert oder eingefügt werden.

 

Hilfe

Wählen Sie in AutoCAD 2007 im Menü ? / Zusätzliche Ressourcen / Entwickler-Hilfe, um die Standardhilfe zur Programmierung aufzurufen.

In der Im VBA-Editor wählen Sie

Microsoft Visual Basic Hilfe F1 oder klicken Sie auf das Objekt oder den Funktionsnamen, zu welchem Sie Hilfe benötigen und drücken Sie die Taste F1.

Sie können sich viel Tipparbeit ersparen, indem Sie Programmcode aus der Hilfe in Ihre Prozedur kopieren und Ihren Wünschen entsprechend abändern.

 

Die Entwicklerhilfe ist sehr gut.

Sie können nach Kategorien oder Begriffen suche.

Sie finden darin auch eine Reihe fertiger Programmierbeispiele.

 

 

 

Wenn Sie in der linken Auswahl auf „Entwicklerhandbuch für ActiveX und VBA“ klicken, öffnet sich die rechts dargestellte Auflistung.

 

 

Der Projektexplorer

Menü Ansicht / Projektexplorer. Hier werden alle geladenen Projekte und deren Objekte (Module, Formulare...) angezeigt.

Zum Anzeigen oder Ausblenden des Projektexplorers wählen Sie im Menü Ansicht die Option "Projektexplorer anzeigen" oder drücken Sie STRG+R.

 

Projekt automatisch laden

Menü Extras / Anwendung…

Ziehen Sie das Projekt bei gedrückter linker Maustaste auf die Schaltfläche „Inhalt“ in der Startgruppe. Das Projekt wird nun bei jedem Start von AutoCAD automatisch geladen.

 

 

 

Projekt in die laufende AutoCAD-Sitzung laden

Ziehen Sie das Projekt bei gedrückter linker Maustaste in das Register “Geladene Anwendungen”, wird es in die laufende AutoCAD-Sitzung geladen.

 

Projekt entladen

Wählen Sie das Projekt im Register „Geladene Anwendungen“.

Klicken Sie dann auf die Schaltfläche „Entladen“.

 

Das Eigenschaften-Fenster

Die Eigenschaften eines Objekts können über Programmcode während der Laufzeit eingestellt werden, oder über das Eigenschaftenfenster in der Entwurfsansicht des Objekts.

Sollten das Fenster ausgeschaltet sein, kann es über das Menü Ansicht bzw. mit der Taste F4 wieder aktiviert werden.

Das Eigenschaftenfenster zeigt nur Eigenschaften an, die für das gewählte Objekt verfügbar sind.

Um z.B. den Formularnamen zu ändern, klicken Sie auf das Formular, und dann auf "UserForm1".

 

 

Das Code-Fenster

Im Codefenster können Sie Ihren Programmcode eintippen. Sie gelangen über das Kontextmenü (Klick mit der rechten Maustaste auf das gewünschte Objekt) oder über das Menü Ansicht in das Codefenster.

Durch Doppelklick auf das Dokument-Objekt „ThisDrawing“ oder Formular-Steuerelemente gelangen Sie ebenfalls in das Codefenster.


Funktionskatalog

Drücken Sie in der Code-Ansicht die Taste F2, dann werden die Funktionen aufgelistet.

 


Einstellungen der Entwicklungsumgebung

Die Optionen des Codefensters, der Formulare, des Projektexplorers und des Eigenschaftsfensters (usw.) können im Menü Extras/Optionen eingestellt werden.

In den verschieden Registern finden Sie die weiteren Einstellungen.

 

Editoreinstellungen

Automatische Syntaxprüfung

Prüft auf Schreibfehler im Programmcode

Variablendeklaration erforderlich

Jede Variable, die verwendet wird, muss vorher deklariert werden. Im Modul wird die Zeile „Option explicit“ eingefügt.

Elemente automatisch auflisten

Elemente, die für ein Objekt verfügbar sind, werden während des Schreibens aufgelistet. Ist die Option ausgeschaltet, wird die Auflistung nicht gezeigt.

Automatische Quickinfo

Beim Einfügen von Funktionen werden die erforderlichen bzw. verfügbaren Argumente angezeigt.

Automatische Datentips

Wenn Sie den Mauscursor während des Programmtests auf eine Variable setzen, wird der Inhalt der Varialen angezeigt.

Drag and Drop bei der Textbearbeitung

Markierter Text kann bei gedrückter linker Maustaste an eine andere Stelle verschoben werden

Standardmäßig ganzes Modul anzeigen

Alle Funktionen innerhalb eines Moduls werden fortlaufend angezeigt

Prozedurtrennlinie

Zwischen den Prozeduren wird eine Linie eingefügt

Tab-Schrittweite

Stellt den Abstand ein, um den der Cursor nach rechts springt, wenn die Tab-Taste einmal gedrückt wird.

                                        

Editorformat

Hier kann die Vorder- bzw. Hintergrundfarbe, sowie die Schriftart- und größe für die einzelnen Textarten eingestellt werden

 

Allgemeine Einstellungen

Einstellungen für Raster, Quickinfo, Fehlerbenachrichtigung und Kompilierverhalten.

 

 

 

Raster anzeigen

Das Raster ist als Hilfe beim Anordnen der Steuerelemente auf Formularen gedacht. Sie können einstellen, ob das Raster angezeigt werden soll und wie groß die Rasterabstände sind

 

Steuerelemente am Raster ausrichten

Sie können einstellen, ob am Raster, ob am Raster ausge­rich­tet werden soll

 

Quickinfo anzeigen

Zeigt die Quickinfo für die Symbolleistenschaltflächen.

 

Projektausblendung schließt Fenster

Legt fest, ob die Projekt-, UserForm-, Objekt- oder Modul­fenster automatisch geschlossen werden, wenn ein Projekt im Projekt-Explorer ausgeblendet wird.

 

Benachrichtigung vor Zustandsänderung

Legt fest, ob eine Benachrichtigung erfolgt, dass durch die an­ge­forderte Aktion alle Variablen auf Modulebene für ein laufendes Projekt zurückgesetzt werden.

 

Bei jedem Fehler unterbrechen

Bei jedem Fehler wird für das Projekt der Haltemodus akti­viert,

 

In Klassenmodul unterbrechen

Bei Fehler im Klassenmodul wird der Haltemodus aktiviert.

 

Bei nichtverarbeiteten Fehlern unterbrechen

Wenn eine Fehlerbehandlungsroutine läuft, wird der Fehler behandelt, ohne den Haltemodus zu aktivieren. Der Halte­modus wird aktiviert, wenn keine Fehlerbehandlungs­routine vorhanden ist.

 

Kompilieren bei Bedarf

Code wird bei Bedarf kompiliert wird, wodurch die Anwen­dung schneller gestartet werden kann (sonst beim Start)

 

Im Hintergrund kompilieren

Leerlaufzeit während der Laufzeit wird für die Kompilierung des Projekts im Hintergrund verwendet.

Verankern der Fenster

Legt die Fenster auf der linken Seite der Entwicklungsumgebung ab und verankert sie dort.

 

 

 

Makros

Inhalte dieses Kapitels:

 

 

Makro

Der Begriff Makro umschreibt die Aneinanderreihung verschiedener Befehle oder Funktionen zu einem neuen Funktionskomplex.

Makrodialog

Den Makro-Dialog finden Sie im Menü Extras/Makros... in AutoCAD und Office-Programmen, die via VBA programmierbar sind (MS Word, Excel, Access, Powerpoint, Outlook ...).

Begriff

Beschreibung

Globales Projekt

ein VBA-Projekt, das auf der Festplatte gespeichert ist (*.dvb)

Eingebettetes Projekt

wird innerhalb der Zeichnung gespeichert

Dokument

AutoCAD-Zeichnung

Projekt

in der Entwicklungsumgebung geladenes Projekt

ThisDrawing

die aktive Zeichnung, bei eingebetteten Projekten wird die Zeichnung angesprochen, in welche das rojekt eingebettet ist

VBA IDE

Integrated Developement Invironment, integrierte Entwicklungsumgebung (F11)

VBA-Manager

hier könne Anwendungen geladen, erzeugt, geschlossen...werden

Macro-Dialog

zum Anlegen neuer Makros u.a.

VBA-Befehle an der Befehlszeile:

Die VBA-Befehle ermöglichen den Aufruf der VBA-Umgebung per Befehlszeile.

VBAIDE

VBAIDE ruft die Entwicklungsumegebung auf.

 

VBALOAD

VBALOAD lädt ein bestehendes Projekt.

 

VBAUNLOAD

VBALOAD entlädt ein Projekt.

VBAMAN

Der VBA-Manager ist das Steuerfenster für die Projekte. Hier können Projekte geladen, entladen, eingebettet oder gespeichert werden. Sie können auch neue Projekte oder Makros erstellen bzw. in den VBA-Editor wechseln.

Speichern unter

Speichert ein eingebettetes  Projekt auf Festplatte.

Einbetten

Bettet ein globales Projekt ein.

Laden...

Lädt Projekte wie Vbaload.

Entfernen

Entlädt Projekte wie Vbaunload.

 

VBARUN und –VBARUN

VBARUN ruft ein Dialogfenster zur Auswahl eines Makros auf, das ausgeführt werden soll.

Um ein Makro per Schaltfläche aufzurufen, verwenden Sie den Befehl -VBARUN. Das Minuszeichen bewirkt, dass das Dialogfenster nicht angezeigt wird.

Sobald das Dialogfenster angezeigt wird, wird der Ablauf des Makros unterbrochen.

 

Befehl: -vbarun ¿

Makroname: hier den Macronamen eingeben und bestätigen.


Makro erstellen

Makros werden automatisch in einem globalen Modul hinterlegt. Das Projekt, in welchem das Makro enthalten ist, wird nicht automatisch mit der Zeichnung gespeichert, sondern bedarf der manuellen Speicherung, Datei/Speichern.

Menü

Tastaturbefehl

Tastenkombination

Werkzeuge/Makros...

VBAMAN

ALT+F8

 

1.     Geben Sie dem Makro den Namen „MeinMakro“

 

 

2.     Klicken Sie auf „Erstellen“

3.     Bestätigen Sie mit OK und bestätigen Sie, wenn Sie gefragt werden, ob die Zeichnung gespeichert werden soll

 

 

4.     Fügen Sie den folgenden Programmcode zwischen die beiden Zeilen ein:

 

Sub MeinMakro()

          MsgBox „Das ist mein erstes Programm“

End Sub

 

 

5.     Schließen Sie den VBA – Editor

6.     Rufen Sie das Menü Werkzeuge/Makro... auf oder betätigen Sie ALT + F8

7.     Wählen Sie das Makro „MeinMakro“ und klicken Sie auf „Ausführen“.

 

 

Makro – Dialogfenster

Ausführen: Ausführen des ausgewählten Makros.

Schließen: Schließt das Dialogfenster.

Hilfe: Ruft die Hilfe auf.

Einzelschritt: Führt das Macro zeilenweise aus.

Bearbeiten: Ändern des Macros.

Erstellen: Erstellt neues Macro.

Löschen: Löscht das Macro.

 

Makro über Tastaturbefehl Aufrufen

Der Befehl VBARUN ruft das Makrodialogfenster auf. Möchte man den Makronamen über die Tastatur eingeben, stellt man ein Minuszeichen davor.

Befehl:  –VBARUN MeinMakro

 

 

Übung 1: Schaltfläche zum Aufrufen des Macros

1.     Klicken Sie auf mit der rechten Maustaste auf ein beliebiges Werkzeugsymbol.

2.     Wählen Sie die Option „Anpassen“.

3.     Klicken Sie auch hier auf die Schaltfläche „Anpassen“.

Oder Befehl: cui ¿.

 

4.     Klicken Sie auf mit der rechten Maustaste auf ein beliebiges Werkzeugsymbol.

5.     Wählen Sie die Option „Anpassen“.

6.     Klicken Sie auch hier auf die Schaltfläche „Anpassen“.

Oder Befehl: cui ¿.

 

Klicken Sie auf „Neu“.

 

Programmaufruf erstellen

;                    Return

MeinMakro    Makroname

7.     Wenn Sie die Schaltfläche zeichnerisch verschönern möchten, klicken Sie auf das Symbol neben „Kleines Bild“ und werden Sie kreativ.

 

Schaltfläche in eine Symbolleiste ziehen

8.     Ziehen Sie das obere Symbol auf der rechten Seite  (grau in grau d.h. unsichtbar) z.B. in die Symbolleiste „Zeichnen“.

9.     Bestätigen Sie mit OK.

 

Aufruf des Makros

Klicken Sie auf den neuen Befehl im Werkzeugkasten „Zeichnen“.

Projekte erstellen

Betätigen Sie die in AutoCAD die Tastenkombination Alt+F11 (bei gedrückter Alt-Taste die F11-Taste drücken) oder wählen Sie im Menü Werkzeuge/Makro/Visual Basic Editor ...

Menü

Tastaturbefehl

Tastenkombination

Werkzeuge/Makro/Visual Basic Editor..

VBAIDE

ALT+F11

 

Userform erstellen

In der Entwicklungsumgebung Menü Einfügen/Userform oder Kontextmenü des Projektexplorers/Einfügen/Userform...

 

 

Einfügen von Steuerelementen

Um ein Steuerelement einzufügen, klicken Sie es zuerst in der Werkzeugsammlung an, um es zu aktivieren. Danach zeigen Sie im Formular an die Position, wo Sie es einfügen möchten.

 

 

Übung 2: Platzieren von weiteren Steuerelementen

1.      Klicken Sie auf die Befehlsschaltfläche in der Werkzeugsammlung

2.     Klicken Sie im Formular an die gewünschte Position (CommandButton1)

3.     Klicken Sie auf das Textfeldsteuerelement in der Werkzeugsammlung

4.     Klicken Sie in den oberen Bereich es Formulars

5.     Klicken Sie auf das Textfeldsteuerelement in der Werkzeugsammlung und klicken Sie unterhalb des ersten Textfeldsteuerelements auf das Formular

6.     Doppelklicken Sie auf CommandButton1.

 

 

 

7.     Fügen Sie den Programmcode ein.

 

Textbox2.Value Wert aus Textbox2

Val(Textbox1)   Zahlenwert aus Textbox1, falls ein Text eingegeben wird, entsteht ein Fehler.

 

 

Ausführen des Programms

Menü Ausführen.

Zum Ausführen des Programms innerhalb des VBA-Editors, klicken Sie auf die Schaltfläche  (oder Taste F5).

 

Debuggen oder schrittweises Ausführen

Durch Betätigung der Taste F8 können Sie den Programmcode schrittweise durchlaufen (Debuggen). Sie können die Werte, welche Variablen zu dieser Zeit haben einsehen (einfach Mauscursor auf die Variable halten).

Schreiben Sie die Zahl 5 in die obere Textbox und klicken Sie auf CommandButton1.

Da dieses Vorgehen nur während der Programmerstellung und zum Testen geeignet ist, finden Sie nachfolgend die Anleitung, wie Sie dieses Formular aus AutoCAD aufrufen können.Klicken Sie auf Ausführen  oder drücken Sie die Funktionstaste F5

 

 

 

Formulare aus AutoCAD starten

1.     Erstellen Sie in AutoCAD ein neues Makro mit dem Namen „Quadrieren

 

 

2.     Geben Sie in der Modulzeile folgenden Code ein

Auf das Objekt UserForm1 wird die Methode „Anzeigen“ = show angewendet.

 

3.     Geben Sie in AutoCAD an der Befehlszeile folgende Befehle ein:
Befehl: -vbarun
¿
Makroname: Quadrieren ¿

 

 


Übung 3: Schaltfläche zum Aufrufen des Formulars

Gehen Sie so vor wie auf Seite 20 ff. beschrieben.

Übung 4: Function-Prozedur erstellen

Wie bereits beschrieben kann eine Funktion ein Wert zurückgeben. Dies geschieht über den Funktionsnamen.

 

 

 

Ergänzen Sie die Function wie rechts dargestellt.

An die Function HochDrei wird der Inhalt der Variblen EineZahl übergeben. Der Inhalt dieser Variablen wir 2 Mal mit sich selbst multipliziert.

 

Festlegen von Formaten

Bei Berechnungen ist es wichtig, dass das richtige Format für die Funktion festgelegt wird. Die Funktion HochDrei wurde hier ergänzt. Das Funktionsergebnis ist eine Single-Zahl, genauso wie die Zahl, die von der aufrufenden Prozedur kommt.

 

 

 

 

Hinweis:

Ohne Angabe eines Datentyps wird automatisch Variant verwendet. Dieser Datentyp kann alle Inhalte speicher, benötigt aber viel Speicherplatz.

 

 

Single (Datentyp)

Ein Datentyp, der Fließkommavariablen mit einfacher Genauigkeit als 32-Bit-Fließkommazahlen (4 Bytes) speichert. Der Wertebereich ist -3,402823E38 bis -1,401298E-45 für negative Werte und von 1,401298E-45 bis 3,402823E38 für positive Werte. Das Typkennzeichen Ausrufezeichen (!) steht in Visual Basic für den Datentyp Single.

 

Programmaufruf über CommandButton1

  • Doppelklick auf CommandButton1
  • Geben Sie den Code wie unten dargestellt ein.

Der Textbox2 wird das Ergebnis aus der Funktionsberechnung zugewiesen.

 

Testen des Formulars:

1.     Klicken Sie auf die Schaltfläche Ausführen  (oder F5).

2.     Geben Sie in Textbox1 die Zahl 3 ein und klicken Sie auf CommandButton1.

 

Schaut es so aus wie oben? Super!

Beschreibung des Programmcodes

Textbox2 = HochDrei(Val(Textbox1))

Der Wert in Textbox2 entspricht dem Ergebnis aus der Funktion HochDrei.

An die Funktion HochDrei wird der Wert aus Textbox1 übergeben.

Weil dort auch ein Text stehen könnte, wurde die Funktion „VAL“ vorangestellt. Diese Funktion wandelt Textformat in Zahlenformat um. Der Text „1.2“ wird zur Zahl 1,2. Der Text „Walter“ wird zu 0.

Achten Sie darauf, dass in VBA ein Punkt als Dezimaltrennzeichen steht, nicht ein Komma.

Textbox2 = Val(„2.3“)

            Inhalt von Textbox2 = 2,3

Die Standardeigenschaft des Textbox-Steuerelements ist „Value“ also der Inhalt. Das Standardereignis muss man nicht angeben, aber man kann das Programm grundsätzlich leichter lesen, wenn die jeweilige Eigenschaft angegeben wird.

Textbox2.Value = HochDrei(Val(Textbox1.Value))

‘oder

Textbox2 = Hochdrei(Val(Textbox1))

Die Funktion HochDrei berechnet

HochDrei = EineZahl*EineZahl*EineZahl

und speichert das Ergebnis im Namen der Funktion. Dadurch kann das Ergebnis an die aufrufende Stelle zurückgegeben werden.


Sprachelemente in VBA

Inhalt dieses Kapitels:

Namen und Benennung

Befolgen Sie die folgenden Regeln, wenn Sie Prozeduren, Konstanten, Variablen und Argumente in einem Visual Basic-Modul benennen:

Die Namen dürfen nicht länger als 255 Zeichen sein, Steuerlemente, Formulare, Module und Klassen dürfen nicht mehr als 40 Zeichen haben.

Tipp: Verwenden Sie möglichst kurze Namen.

Namenswahl: Einschränkungen

Visual Basic berücksichtigt die Groß-/Kleinschreibung nicht, behält jedoch die Schreibweise der Anweisung bei, mit der der Name deklariert wurde.

Kommentare

Programmzeilen mit einem vorangestellten Hochkomma (Shift + # = ' ) werden nicht ausgeführt. Sie werden im Code grün dargestellt und beinhalten Beschreibungen.

Beschreiben Sie Programmteile, sofern nicht sofort erkennbar ist, was der Programmcode bewirkt. Sie haben es später leichter, wenn Programmänderungen erforderlich sind bzw. wenn ein anderer Programmierer Ihren Programmcode ändert.

Namenskonventionen für Variablen

Es gibt auch bei der Benennung der Variablen Konventionen, die nicht bindend sind, an die sich aber viele Programmierer halten, um die Lesbarkeit des Programmcodes zu erleichtern: 

Die ersten 3 Zeichen von Variablen sollten den Datentyp kennzeichnen. Dadurch sieht man an beliebiger Stelle des Programmcodes, welchen Datentyp die Variable hat.

Kürzel                        Datentyp               Beispiel

bln                             Boolean                Dim blnTest as Boolean

byt                            Byte                      Dim bytTest as Byte

con                            Constant               Const conPi = 3.1415926

cur                             Currency                Dim curBetrag as Currency

dtm                           Date                      Dim dtmTag as Date

dec                            Dezimal                 Dim decTest as Variant

dbl                            Double                  Dim dblPunktX as Double

int                              Integer                   Dim inti as Integer

lng                             Long                     Dim lngTest as Long

obj                            Objekt                   Dim objBlock as Object

sng                            Single                   Dim sngPunktY as Single

str                             String                    Dim strAttribut as String

var                             Variant                  Dim varTest as Variant

Geschützte Namen

Mit folgenden Funktionen können Daten in einen anderen Typ umgewandelt werden. Die Liste ist nicht komplett. Diese und viele andere Begriffe dürfen nicht als Namen verwendet werden.

·                Chr

·                Format

·                Lcase

·                Ucase

·                DateSerial

·                DateValue

·                Cint

·                CLng

·                CSng

·                CStr

·                Cvar

·                Fix

·                Int

·                Day

·                Month

·                Weekday

·                Year

·                Hour

·                Minute

·                Second

·                Val

Variablen deklarieren

Variablen sind Platzhalter, die während des Programmablaufs mit Werten gefüllt werden. Sie werden nach Ihrer Gültigkeitsdauer und dem Typ der zu speichernden Daten unterschieden. Die Variablendeklaration kann mit unterschiedlichen Schlüsselwörtern erfolgen.

Dim

Zur Deklaration von Variablen verwenden Sie grundsätzlich die Dim-Anweisung.

In dem folgenden Beispiel werden verschiedene Variablen erstellt und die Datentypen zugewiesen.

 

          Dim inti as Integer
          Dim varName as Variant
          Dim dblPunkt as Double

          Dim objLayer as AcadLayer

Oder in einer Zeile, um Platz zu sparen:

Dim strTxt1 as String, strTxt2 as String, strTxt3 as String

Im folgenden Beispiel ist die Variable dblZahl nur innerhalb der Funktion Berechnen sichtbar. Der Variablenname kann auch in einer zweiten und dritten Prozedur eingesetzt werden und dort andere Inhalte speichern.

Private Sub Berechnen()

Dim dblZahl as Double

....

End Sub

Public für öffentliche Variablen

Erfolgt die Deklaration der Variablen zu Beginn eines Moduls im Deklarationsabschnitt, ist die Varable auf Modulebene sichtbar. Erfolgt die Deklaration im Standardmodul mit der Public-Anweisung, ist die Variable im gesamten Projekt sichtbar.

Z.B. Verweise auf Anwendungen oder auf Objekte in AutoCAD, können in öffentlichen Variablen gespeichert werden.

Im folgenden Beispiel ist die Variable appExcel sowohl in Prozedur1 als auch in Prozedur2 sichtbar.

Option explicit

Public appExcel as Excel.Application

 

Private Sub Prozedur1()

...

End Sub

 

Private Sub Prozedur2()

...

End Sub

Gültigkeitsbereich von Variablen

Wenn der Gültigkeitsbereich einer Variablen auf eine Prozedur beschränkt ist, nennt man sie lokal.

Die Werte in Variablen sind nur so lange verfügbar, bis die Prozedur durchlaufen ist.

Lebensdauer von Variablen

Die Lebensdauer von Variablen gibt an, wie lange der Wert in der Variablen gespeichert bleibt. Variablen, die mit der DIM- oder PRIVATE-Anweisung innerhalb von Prozeduren gespeichert wurden, verlieren Ihre Inhalte, nachdem die Prozedur beendet wurde. Der reservierte Speicherplatz wird wieder freigegeben.

Benötigen Sie Variablen, die nach dem Durchlaufen der Prozedur den Wert behalten, der ihnen zugewiesen wurde, verwenden Sie die STATIC-Anweisung.

Static

Statische Variablen werden mit dem Schlüsselwort STATIC definiert. Sie behalten Ihren zugewiesenen Wert während der Laufzeit des Programms.

Werte, die über öffentliche Variablen gespeichert werden, können häufig auch in STATIC-Anweisungen definiert werden. Sie reduzieren damit die Anzahl der öffentlichen Variablen.

Konstanten und deren Einsatz

Konstanten sind ebenfalls Platzhalter. Ihnen werden aber während der Laufzeit keine neuen Werte zugewiesen. Der Inhalt des Platzhalters ist konstant. Soll der Wert geändert werden, ist ein Eingriff in den Programmcode erforderlich.

Z.B. die Kreiszahl PI sollte als Konstante definiert werden, weil sie sich kaum ändern wird. Auch die Mehrwertsteuer kann als Konstante hinterlegt werden, obwohl sie sich  immer wieder ändert.

Konstanten werden in einem Modul oder einem Formularmodul definiert. Sie stehen am Anfang des Moduls, hinter dem Ausdruck Option explicit (Variablendeklaration erforderlich)

Kreiszahl PI:

Option Explicit
Public Const dblPi = 3.14159265358979

Option explicit

Option explicit steht am Anfang des Moduls. Die Anweisung bewirkt, dass Variablen mit Dim, Private, Public, ReDim oder Static explicit deklariert werden müssen.

Wenn Sie einen nicht deklarierten Variablennamen verwenden, tritt ein Fehler auf. Wenn Sie die Anweisung Option Explicit nicht verwenden, haben alle nicht deklarierten Variablen, wenn nicht anders angegeben, den Typ Variant.

Sie sollten immer mit dieser Einstellung arbeiten. Jeder Schreibfehler im Programmcode wird sonst als neue Variable verstanden.

 


Datentypen und Wertebereiche

Datentyp

Speicherbedarf

Wertebereich

Byte

1 Byte

0 bis 255

Boolean

2 Bytes

True oder False

Integer

2 Bytes

-32.768 bis 32.767

Long
(lange Ganzzahl)

4 Bytes

-2.147.483.648 bis 2.147.483.647

Single
(Gleitkommazahl mit einfacher Genauigkeit)

4 Bytes

-3,402823E38 bis -1,401298E-45 für negative Werte; 1,401298E-45 bis 3,402823E38 für positive Werte.

Double
(Gleitkommazahl mit doppelter Genauigkeit)

8 Bytes

-1,79769313486231E308 bis
-4,94065645841247E-324 für negative Werte; 4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte.

Currency
(skalierte Ganzzahl)

8 Bytes

-922.337.203.685.477,5808 bis 922.337.203.685.477,5807

Decimal

14 Bytes

+/-79.228.162.514.264.337.593.543.950.335 ohne Dezimalzeichen;
+/-7,9228162514264337593543950335 mit 28 Nachkommastellen; die kleinste Zahl ungleich Null ist
+/-0,0000000000000000000000000001.

Date

8 Bytes

1. Januar 100 bis 31. Dezember 9999.

Object

4 Bytes

Beliebiger Verweis auf ein Objekt vom Typ Object.

String
(variable Länge)

10 Bytes plus Zeichenfolgenlänge

0 bis ca. 2 Milliarden.

String
(feste Länge)

Zeichenfolgenlänge

1 bis ca. 65.400

Variant
(mit Zahlen)

16 Bytes

Numerische Werte im Bereich des Datentyps Double.

Variant
(mit Zeichen)

22 Bytes plus Zeichenfolgenlänge

Wie bei String mit variabler Länge.

Benutzerdefiniert
(mit Type)

Zahl ist von Elementen abhängig

Der Bereich für jedes Element entspricht dem Bereich des zugehörigen Datentyps.

 

 

Byte

Variablen vom Datentyp Byte werden als einzelne 8-Bit-Zahlen (1 Byte) ohne Vorzeichen gespeichert und haben einen Wert im Bereich von 0 bis 255.

Boolean

Beim Umwandeln anderer numerischer Datentypen in Werte des Typs Boolean wird 0 zu False, und alle anderen Werte werden zu True. Beim Umwandeln von Werten des Datentyps Boolean in andere Datentypen wird False zu 0 und True zu -1.

Integer

Variablen vom Datentyp Integer werden als 16-Bit-Zahlen (2 Bytes) in einem Bereich von -32.768 bis 32.767 gespeichert. Das Typkennzeichen für Integer ist das Zeichen (%).

Long

Variablen vom Datentyp Long (lange Ganzzahl) werden als 32-Bit-Zahlen (4 Bytes) mit Vorzeichen im Bereich von -2.147.483.648 bis 2.147.483.647 gespeichert. Das Typkennzeichen für Long ist das Zeichen (&).

Single

Variablen vom Datentyp Single (Gleitkommazahl mit einfacher Genauigkeit) werden als 32-Bit-Gleitkommazahlen (4 Bytes) nach IEEE im Bereich von -3,402823E38 bis -1,401298E-45 für negative Werte und von 1,401298E-45 bis 3,402823E38 für positive Werte gespeichert. Das Typkennzeichen für Single ist das Ausrufezeichen (!).

Double

Variablen vom Datentyp Double (Gleitkommazahl mit doppelter Genauigkeit) werden als 64-Bit-Gleitkommazahlen (8 Bytes) nach IEEE im Bereich von -1,79769313486232E308 bis -4,94065645841247E-324 für negative Werte und von 4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte gespeichert. Das Typkennzeichen für Double ist das Zeichen (#).

Currency

Variablen vom Datentyp Currency werden als 64-Bit-Zahlen (8 Bytes) in einem ganzzahligen Format gespeichert und durch 10.000 dividiert, was eine Festkommazahl mit 15 Vorkomma- und 4 Nachkommastellen ergibt. Diese Darstellung ergibt einen Wertebereich von -922.337.203.685.477,5808 bis 922.337.203.685.477,5807. Das Typkennzeichen für Currency ist das Zeichen (@).

Der Datentyp Currency eignet sich besonders für Berechnungen mit Geldbeträgen und für Festkommaberechnungen, die eine hohe Genauigkeit erfordern. Die Rechengeschwindigkeit ist höher als bei Verwendung des Single- oder Double-Datentyps.

Decimal

Variablen des Datentyps Decimal werden als 96-Bit-Ganzzahlen (12 Bytes) ohne Vorzeichen mit einer variablen Potenz zur Basis 10 gespeichert. Die Potenz zur Basis 10 wird als Skalierungsfaktor verwendet und bestimmt die Anzahl der Nachkommastellen, die in einem Bereich von 0 bis 28 liegen kann. Beim Skalierungsfaktor von 0 (keine Nachkommastellen) liegt der größtmögliche Wert bei +/-79.228.162.514.264.337.593.543.950.335. Bei 28 Nachkommastellen liegt der größte Wert bei +/-7,9228162514264337593543950335 und der kleinste Wert, der ungleich Null ist, bei +/-0,0000000000000000000000000001.

 

Anmerkung   Der Datentyp Decimal kann nur mit einem Wert vom Typ Variant benutzt werden, d.h., Sie können keine Variable als Decimal deklarieren. Mit der CDec-Funktion können Sie jedoch einen Wert vom Typ Variant erstellen, dessen Untertyp Decimal ist.

Date

Variablen vom Datentyp Date werden als 64-Bit-Gleitkommazahlen (8 Bytes) nach IEEE gespeichert und können ein Datum im Bereich vom 01. Januar 100 bis zum 31. Dezember 9999 und eine Uhrzeit im Bereich von 0:00:00 bis 23:59:59 speichern. Jeder gültige Wert eines Datums- oder Zeitliterals kann einer Variablen vom Datentyp Date zugewiesen werden. Eine Datumsangabe im Programmcode muss durch das Zeichen (#) eingeschlossen sein, zum Beispiel: #01.01.1993# oder #1 Jan 93#.

Variablen vom Datentyp Date verwenden zur Darstellung des Datums das auf dem Computer eingestellte kurze Datumsformat. Zeitangaben werden mit dem auf dem Computer eingestellten Zeitformat (entweder 12- oder 24-Stunden) dargestellt.

Beim Umwandeln anderer numerischer Datentypen in Werte des Datentyps Date repräsentieren die Vorkommastellen das Datum und die Nachkommastellen die Uhrzeit. Die Zeit wird als Bruchteil eines Tages dargestellt. Mitternacht entspricht dem Wert 0, und Mittag entspricht den Nachkommawert 0,5 (0,5 Tage). Negative ganze Zahlen repräsentieren ein Datum vor dem 30. Dezember 1899.

Object

Variablen vom Datentyp Object werden als 32-Bit-Adressen (4 Bytes) gespeichert, die auf Objekte in einer Anwendung verweisen. Einer Variablen, die als Object deklariert wurde, kann anschließend mit der Set-Anweisung ein Verweis auf jedes von der Anwendung erzeugte Objekt zugewiesen werden.

 

Anmerkung   Obwohl eine Variable, die mit dem Datentyp Object deklariert wurde, einen Verweis auf jedes beliebige Objekt enthalten kann, erfolgt die Verbindung mit dem Objekt, auf das verwiesen wurde, immer zur Laufzeit (Binden zur Laufzeit). Sie können eine frühere Bindung (Binden zur Kompilierungszeit) erzwingen, indem Sie den Objektverweis einer Variablen zuweisen, die durch den Namen einer Klasse deklariert wurde.

String

Es gibt zwei Arten von Zeichenfolgen: Zeichenfolgen variabler Länge und Zeichenfolgen fester Länge.

Zeichenfolgen variabler Länge können bis zu 2 Milliarden (oder 2^31) Zeichen enthalten.

Zeichenfolgen fester Länge können 1 bis etwa 64 KB (2^16) Zeichen enthalten.

Anmerkung   Zeichenfolgen fester Länge mit dem Attribut Public können in Klassenmodulen nicht verwendet werden.

Die Codes für Zeichen vom Datentyp String liegen im Bereich von 0 bis 255 (einschließlich). Die ersten 128 Zeichen (0 bis 127) entsprechen den Buchstaben und Symbolen auf einer US-amerikanischen Standardtastatur. Diese ersten 128 Zeichen stimmen mit den im ASCII-Zeichensatz definierten Zeichen überein. Die zweiten 128 Zeichen (128 bis 255) sind Sonderzeichen, z.B. Buchstaben aus internationalen Alphabeten, Akzentzeichen, Währungssymbole und Symbole für mathematische Brüche. Das Typkennzeichen für String ist das Dollarzeichen ($).

Benutzerdefinierter Datentyp

Jeder Datentyp, den Sie mit der Type-Anweisung definieren. Benutzerdefinierte Datentypen können ein oder mehrere Elemente eines beliebigen Datentyps, eines Datenfeldes oder eines bereits bestehenden benutzerdefinierten Datentyps enthalten. Beispiel:

Type Typ1

Name1 As String                      ' String-Variable für Namen.

Geburtstag As Date      ' Date-Variable für Geburtstag.

Geschlecht As Integer  ' Integer-Variable für Geschlecht, 0 weiblich, 1 männlich.

End Type

Variant

Der Datentyp Variant ist der Datentyp für alle Variablen, die nicht explizit (durch eine Anweisung wie Dim, Private, Public oder Static) als anderer Datentyp deklariert werden. Für den Datentyp Variant gibt es kein Typkennzeichen.

Variant ist ein besonderer Datentyp, der beliebige Daten mit Ausnahme von String-Daten fester Länge und benutzerdefinierten Typen enthalten kann. Ein Variant kann auch die speziellen Werte Empty, Error, Nothing und Null enthalten. Mit der Funktion VarType oder TypeName können Sie festlegen, wie die Daten in einer Variablen vom Datentyp Variant interpretiert werden.

Als numerische Daten sind beliebige Ganzzahlen oder reelle Zahlen im Bereich von -1,797693134862315E308 bis -4,94066E-324 für negative Werte und von 4,94066E-324 bis 1,797693134862315E308 für positive Werte zulässig. Im Allgemeinen behalten numerische Daten vom Datentyp Variant den ursprünglich festgelegten Datentyp als Untertyp innerhalb des Variants bei. Wenn Sie zum Beispiel einem Variant einen Wert vom Datentyp Integer zuweisen, interpretieren alle nachfolgenden Operationen den Variant als Datentyp Integer. Wenn Sie jedoch mit einem Variant mit dem Typ Byte, Integer, Long oder Single eine arithmetische Operation ausführen und das Ergebnis den zulässigen Bereich für den ursprünglichen Datentyp überschreitet, wird das Ergebnis innerhalb des Variant automatisch zu dem nächstgrößeren Datentyp erweitert. Byte wird zu Integer, Integer wird zu Long, und Long bzw. Single werden zu Double umgewandelt. Werden die zulässigen Bereiche für den Datentyp Currency, Decimal oder Double in einem Variant überschritten, so tritt ein Fehler auf.

Der Datentyp Variant kann anstelle jedes anderen Datentyps verwendet werden. Enthält eine Variant-Variable Ziffern, so können diese (je nach Kontext) entweder als Zeichenfolgendarstellung der Ziffern oder als deren tatsächlicher Wert interpretiert werden. Beispiel:

Dim varTest As Variant

varTest = 44137

In diesem Beispiel enthält TestVar eine numerische Darstellung, nämlich den eigentlichen Wert 44137. Die arithmetischen Operatoren können auf alle Variablen vom Datentyp Variant angewendet werden, sofern sie numerische Daten enthalten oder Zeichenfolgendaten, die als numerische Daten interpretiert werden können. Mit dem Operator + kann TestVar zu einer Variant-Variablen, die eine Zahl enthält, bzw. zu einer Variablen eines numerischen Typs addiert werden; das Ergebnis ist eine arithmetische Summe.

Empty

Der Wert Empty bezeichnet eine nicht initialisierte Variant-Variable (d.h., ihr wurde noch kein Wert zugewiesen). Eine Variant-Variable mit dem Wert Empty entspricht dem Wert 0 in einem numerischen Kontext und einer Null-Zeichenfolge ("") im Zusammenhang mit Zeichenfolgenoperationen.

Null

Verwechseln Sie Empty nicht mit Null. Der Wert Null zeigt an, dass die Variable vom Datentyp Variant absichtlich keine gültigen Daten enthält.

Der Sonderwert Error in einer Variablen vom Datentyp Variant wird verwendet, um das Eintreten von Fehlerbedingungen in einer Prozedur zu kennzeichnen. Im Gegensatz zu anderen Fehlern findet jedoch keine normale Fehlerbehandlung durch die Anwendung statt. Daher kann der Programmierer oder die Anwendung selbst den Fehler auswerten und nötige Maßnahmen ergreifen. Mit der CVErr-Funktion können Sie eine reelle Zahl umwandeln und einen Wert vom Typ Error erzeugen.

Konvertierung von Datentypen

Häufig ist es nötig, die Daten in ein anderes Format umzuwandeln. Z.B. zur Ausgabe von Währungsinformationen sollte DM (EUR) als Währungsformat verwendet werden. Sind die Zahlen im Format Single oder Double vorhanden, können sie schnell in das Währungsformat gebracht werden.

Me!Textbox1 = CCur(dblZahl)

Diese Umwandlungsfunktionen können z.B. auch in MS Access oder MS Excel verwendet werden.

Datentypkonvertierung

·                CBool                   Boolean

·                CByte                    Byte

·                CCur                     Währung

·                CDate                   Datum

·                CDbl                     Double

·                CInt                       Integer

·                CLng                     Long

·                CSng                    Single

·                CStr                      String

·                CVar                     Variant

·                CVErr                    Error

 

Text in Zahl umwandeln

Umwandeln eines Textes in eine Zahl.

In der Variablen inti steht 1234, obwohl der Wert aus einer Variablen des Typs STRING stammt.

Wenn der Textwert „Alfred“ an die Integer-Variable übergeben wird, führt dies zu einem Laufzeitfehler.

 

Fehler bei der Umwandlung

Die Funktion führt also früher oder später zu Fehlern.

Der Fehler kann wie rechts dargestellt umgangen werden, indem man die Variable StrText mit der Funktion „VAL“ in einen Zahlenwert umwandelt. Alfred ergibt dabei den Zahlenwert 0.

 

 

 

Verkettung von Codezeilen

Mit dem & (Et = kaufmännisches und) kann eine Textverkettung durchgeführt werden. Diese Verkettung funktioniert auch z.B. in einer Zelle in Excel:

Schreiben Sie in der Zelle A3: =A1 & A2
in der Zelle A3 stehen die Inhalte der Zellen A1 und A2 nebeneinander.

Arrays

Variablen können nur einen Wert speichern. Arrays sind in der Lage viele Werte zu speichern. Sie sind vergleichbar mit einer fortlaufenden Liste.

Dim varZahl(0 to 100) as Variant

 

Die folgende Schleife speichert 101 Werte im Array.

Auf Seite 102 finden Sie eine Übung zu den Arrays (Zeilenabstand anpassen).

 

 


Arrayinhalt auslesen

Zum Auslesen der gespeicherten Informationen verwenden Sie folgenden Code:

Setzen Sie in der Funktion einen Haltepunkt (F9) und drücken Sie dann die Taste F8 zum Debuggen. Prüfen Sie mit dem Mauscursor die Werte in inti bzw. varZahl.

 

 

Arrays können gut zum Speichern von Koordinaten verwendet werden, weil die X,Y und Z-Koordinate gleichzeitig gespeichert werden kann.

 

 

Dynamische Arrays

Wenn Sie Werte in einem Array speichern möchten, ist beim Programmstart nicht immer klar, wieviele Werte gespeichert werden sollen. Deshalb kann man das Array ohne Speicherreservierung deklarieren und später, wenn bekannt ist, wieviele Werte darin gespeichert werden sollen, kann mit dem Schlüsselwort REDim der Bereich festgelegt werden.

 

 

Dim strArray () as String...
ReDim strArray (10)
....     

 

Wurden im Array bereits Werte gespeichert, gehen sie verloren, wenn Sie nicht das Schlüsselwort Preserve verwenden.

 

ReDim Preserve strArray (UBound(strArray)+1)


Kontrollstrukturen

Kontrollstrukturen ermöglichen es, auf Situationen im Programmablauf zu reagieren.

Entscheidungsstrukturen

Häufig soll ein Programmcode nur ausgeführt werden, wenn eine oder mehrere Bedingungen erfüllt sind.

Z.B. sollte geprüft werden, ob ein Layer vorhanden ist, bevor er angelegt wird.

If...Then...Else

Wenn eine Bedingung erfüllt ist, führe den ersten Programmcode aus, sonst (Else) führe den alternativen Programmcode aus.

If Bedingung Then
          Programmcode
Else
          Programmcode
End If

 

Falls nur eine Programmzeile ausgeführt werden soll, kann der Block auch folgendermaßen aussehen:

 

          If Bedingung Then Programmcode

 

Die Wenn-Bedingung muss hier nicht mit End If beendet werden, weil der Code in einer Zeile steht.

Die Funktion kann weitere Bedingungen enthalten.

 

Select Case

Wenn mehrere Bedingungen geprüft werden sollen, kommt die Select Case-Struktur zum Einsatz.

 

 


Do While ... Loop

Kopfgesteuerte Schleifen prüfen am Schleifeneingang, ob eine Bedingung erfüllt ist. Ist die Bedingung erfüllt, wird die Schleife nicht durchlaufen.

Do [{While | Until} Bedingung]

[Anweisungen]

[Exit Do]

[Anweisungen]

Loop

 

Übung 5: Kopfgesteuerte Schleife

 

 

 

Sie können auch die folgende, ebenfalls zulässige Syntax verwenden:

Do ... Loop  Until (While)

Fußgesteuerte Schleifen prüfen am Schleifenende, ob die Bedingung erfüllt ist. Sie werden mindestens einmal durchlaufen.

Do

[Anweisungen]

[Exit Do]

[Anweisungen]

Loop [{While | Until} Bedingung

 

Übung 6: Fußgesteuerte Schleife

Die Schleife wird 10 mal durchlaufen.

For…next

For Zähler = Anfang To Ende [Step Schritt]

[Anweisungen]

[Exit For]

[Anweisungen]

Next [Zähler]

Step legt fest, wie groß die Schritte sind, mit welchen das Programm durchlaufen wird. Ein negatives Vorzeichen zählt rückwärts.

 

 

Zählt in 2er-Schritten bis 100, addiert die Werte und gibt das Ergebnis als Meldung aus (hier 2.250).

 

 

 

 

For Each…next

For Each Element In Gruppe

[Anweisungen]

[Exit For]

[Anweisungen]

Next [Element]

For Each wird u.a. verwendet, um bestehende Auflistungen zu durchlaufen. Jedes Element einer Liste wird ausgelesen.

 

Bei jedem Schleifendurchlauf wird eine Meldung ausgegeben.

 

 

Der Programmablauf wird durch die Meldung unterbrochen. Besser wäre hier die Ausgabe am Ende der Prozedur. Dazu werden die Namen der Zeichnungsobjekte in einem String gespeichert.

 

 

 

Unterbrechen des Programmablaufs

Drücken Sie STRG + Pause, um den Programmablauf zu unterbrechen.

Übung 7: Objektnamen einer Zeichnung auslesen

 

 

Das Ergebnis, die Namen der AutoCAD-Objekte, wird in der Variable strObjekte gespeichert und am Ende in einer einzigen Meldung ausgegeben.

 

                                                                                                                                    


Klassenbibliothek bzw. Objektkatalog

Der Objektkatalog beinhaltet alle Objekt. Dort sind auch die selbst erstellten Prozeduren, Formulare und Module bzw. Klassenmodule hinterlegt.

Hier werden auch alle Klassen von Programmen aufgelistet, zu welchen ein Verweis erstellt wurde (Extras/Verweise).

Wählen Sie z.B. AcadBlocks und klicken Sie mit der rechten Maustaste im Fenster „Elemente“ auf die Eigenschaft „Count“.

Wählen Sie das Fragezeichen, um zu diesem Objekt und der entsprechenden Eigenschaft oder Methode Hilfe zu erhalten.

 

 

Beispielcode aus der Hilfe laden

Klicken Sie auf „Example“.

Markieren und kopieren Sie den Code.

Fügen Sie ihn in einem Modul ein.

Debuggen Sie mit der Taste F8.

 

 


Dialogfenster und Meldungen

Die fest eingebaute Funktion MsgBox ermöglicht die Ausgabe von Meldungen, um Fehlermeldungen darzustellen, dem Benutzer das Ergebnis von Funktionen mitzuteilen.

 

 

If MsgBox("Eingabeaufforderung", vbYesNo, "Überschrift") = vbYes Then

...

End If

 

Wenn nur eine Meldung ausgegeben werden soll, benötigen Sie keine Klammern.

MsgBox "Sie haben NEIN geklickt"

 

Beim Eintippen der Funktion wird, sobald Sie die Klammer öffnen die Syntax der Funktion eingeblendet.

Wenn Sie ein Komma eintippen, springen Sie in das nächste Argement.

Wenn Sie dort "vby" eingeben, werden automatisch die verschiedenen Optionen eingeblendet und der Cursor auf "VbYesNo" gestellt.

Im folgenden Beispiel sehen Sie, wie man das Ergebnis eines Meldungsfensters in einer Bedingung weiterverarbeitet.

 

Im ersten Fall stehen die Argumente in Klammern, weil eine Verzweigungsstruktur enthalten ist. Sonst sind für die MsgBox keine Klammern erforderlich.

 

Die Buttons können auch durch Zahlenwerte ersetzt werden. Dadurch wird die Funktion aber schwerer lesbar.

 


Inputbox

Argumente einer Funktion werden häufig direkt vom Benuzter abgefragt. Die Inputbox ist ähnlich aufgebaut, wie die MsgBox und dient zur Eingabe von Daten..

 

 

Syntax:

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

Das Ergebnis der Inputbox muss einer Variablen oder einer Funktion zugewiesen werden.

strEingabe = InputBox ("Eingabe", "Überschrift")

 

Die Inputbox liefert einen Wert vom Datentyp Text zurück.

 

 

Durchlaufen Sie die Prozedur mit dem Debugger. Sie sehen, dass der Übergabewert in Anführungszeichen steht.

 

 

Falls Sie eine Zahleneingabe benötigen, verweden Sie eine Variable mit dem Datentyp Zahl.

Wenn Sie Text eingeben z.B. "Das ist ein Text" und übergeben den Inhalt der Inputbox an die Variable dblEingabe, wird der Zahlenwert 0 daraus.

Wenn Sie die Schaltfläche "Abbrechen" betätigen, wird die leere Zeichenfolge "" zurückgegeben.


Erzeugen von Sub-Prozeduren

Einige Punkte, die bereits früher im Skript behandelt wurden, werden hier noch einmal wiederholt.

 

[Private | Public] [Static] Sub Name [(ArgListe)]

          [Anweisungen]

          [Exit Sub]

          [Anweisungen]

End Sub

Unterschied zwischen Function-Prozeduren und Sub-Prozeduren

Prozeduren führen Anweisungen durch. Es gibt – wie bereits auf Seite 7 beschrieben - zwei Typen: Die Function-Prozedur und die Sub-Prozedur.

Die Function-Prozedur kann über den Funktionsnamen einen Wert an die aufrufende Stelle zurückgeben, die Prozedur kann das nicht. Einer Function-Prozedur kann ein Datentyp zugewiesen werden.

Tippen Sie den folgenden Code in ein Modul ein. Drücken Sie dann die Taste F8, um den Code schrittweise zu durchlaufen. Sie können den Mauscursor auf die verschiedenen Variablen setzen, um die Inhalte abzufragen.

Public und Private Prozeduren

Mit dem Schlüsselwort PUBLIC definieren Sie Prozeduren/Funktionen, die während das Formular geöffnet ist von jedem Modul/Formular der Anwendung aufgerufen werden können. Wenn Sie das Schlüsselwort PRIVATE verwenden, ist die Prozedur nur innerhalb dieses Formulars verfügbar.

Ereignisprozeduren und Function-Prozeduren

Ereignisprozeduren reagieren auf bestimmte Ereignisse, wie z.B. beim Klicken einer Schaltfläche, beim Speichern, beim Drucken, beim Öffnen, beim Schließen einer Zeichnung.

Function-Prozeduren werden aus einer anderen Prozedur aufgerufen.

Aufruf von Prozeduren

Eine Sub-Prozedur wird durch den Funktionsnamen, eventuell gefolgt von Argumenten aufgerufen:

 

Übung 8: Sub-Prozedur Layer zählen

Die folgende Routine zählt alle Layer in der Zeichnung, gibt aber keine weiteren Informationen preis.

 

 

 

Übung 9: Aufruf der Funktion Layer zählen

Die Zeile MsgBox LayerZaehlen ruft die Funktion auf.

Die Messagebox gibt normalerweise einen Text aus. Hier wird aber an die Messagebox das Ergebnis der Funktion LayerZahlen zurückgegeben.

Man hätte die Abfrage der Layerzahl selbstverständlich auch in der Sub-Prozedur durchführen können. Der Vorteil der getrennten Funktion liegt darin, dass sie von unterschiedlichen Stellen aufgerufen werden kann und so nur einmal definiert werden muss.

Die Prozedur wird von einem Formular mit der Schaltfläche CommandButton1 aufgerufen.

 

 

Argumente übergeben

Die Übergabewerte stehen in den Klammern hinter einer Sub- oder Function‑Prozedur.

Prozeduren beenden

Sub-Prozeduren

Public Sub Prozedurname(Argumente)

          Exit Sub

End Sub

Function-Prozeduren

Public Function Funktionsname(Argumente)

          Exit Function

End Function

 

Programmcode kann in Formularmodulen oder in Standardmodulen hinterlegt werden. Der Hauptunterschied liegt in der „Sichtbarkeit“ des Codes bezogen auf andere Prozeduren / Funktionen. Wird die Prozedur im Standardmodul hinterlegt und mit dem Schlüsselwort „Public“ eingeleitet, ist sie von überall aus anzusprechen. Wird die Prozedur dagegen im Formularmodul hinterlegt, muss das Formular geöffnet sein, um darauf zuzugreifen.

 


Zugriff auf Auflistungen und Listenelemente

Der Zugriff auf Listenelemente in einer Auflistung erfolgt über Programmschleifen. Mit Programmschleifen können Sie aber auch einzelne Objekte auswählen. Sie können z.B. alle Texte des Modellbereichs durchlaufen und die Texthöhe oder die Position verändern.

 

Es gibt in AutoCAD folgende Auflistungen:

 

·                Blocks

·                Dictionaries

·                DimStyles

·                Documents

·                Groups

·                Hyperlinks

·                Layers

·                Linetypes

·                MenuBar

·                MenuGroups

·                ModelSpace

·                PaperSpace

·                PlotConfigurations

·                PopupMenu

·                PopupMenus

·                RegisteredApplications

·                SelectionSets

·                TextStyles

·                Toolbar

·                Toolbars

·                UCSs

·                Viewports

·                Views


Übung 10: Layersauflistung durchlaufen

Klicken Sie auf das Menü Einfügen und wählen Sie die Option UserForm.

Klicken Sie in der Werkzeugsammlung die Befehlsschaltfläche an

Klicken Sie an einer beliebigen Stelle auf das Formular.

Doppelklicken Sie auf die Schaltfläche CommandButton1.

 

 

Schreiben Sie den folgenden Programmcode zwischen Private Sub ... und End Sub.

 

 

Beschreibung 1: Layers-Auflistung

Zwischen Beginn und Ende der Sub-Prozedur befindet sich der Programmcode. Die Sub-Prozedur wird ausgeführt, wenn auf den CommandButton1 geklickt wird.

Private Sub CommandButton1_Click
          ...

End Sub

 

Definition der Variablen

Dim strLayer as String

 

As String definiert den Datentyp Text.
Im Platzhalter "strLayer" werden die Layernamen gespeichert, deshalb wurde der Datentyp Text (String) verwendet.

Die Variable "objLayer" wird verwendet, um ein Layerobjekt zu speichern. Deshalb wird der Datentyp "AcadLayer" verwendet.

 

For Each objLayer in ThisDrawing.Layers

 

Bedeutet soviel wie: Für jeden Layer aus der Layerauflistung in dieser Zeichnung

strLayer=strLayer & objLayer.Name & vbCr

 

Im Platzhalter strLayer wird der Layername gespeichert. Beim nächsten Durchlauf aller Layer steht aber in der Variablen der Name des nächsten Layers. Deshalb muss der "alte" Inhalt der Variablen und zusätzlich der neue Name gespeichert werden. Diese Textverkettung wird mit dem & (kaufmännisches UND) realisiert. Der Name wird abgefragt durch die Objektbezeichnung, gefolgt von einem Punkt und der Eigenschaft "Name".

 

Zeilenschaltung

 „& vbCr“ Erzeugt eine Zeilenschaltung, damit der nächste Name in einer neuen Zeile steht. Auch hier wird mit dem & verknüpft.

Das Schlüsselwort next beendet die For-Next-Schleife.

Die Funktion MsgBox strLayer zeigt in einem Meldungsfelnster den Inhalt der Variablen "AlleLayer".

 

Übung 11: Layerauflistung debuggen

Drücken Sie die Taste F8.

Das Formular wird dargestellt. Klicken Sie auf den CommandButton.

Drücken Sie die Taste F8, um den Programmcode schrittweise fortzuführen.

 

 

Durchlaufen Sie die Schleife mit der Taste F8

Setzen Sie den Maus-Cursor auf die Variable "AlleLayer". Sie sehen den derzeitigen Inhalt der Variablen.

Mit jedem Drücken der Taste F8 gehen Sie einen Programmschritt weiter.

 

 

Die For-Each-Schleife wird solange fortgesetzt, bis alle Layer durchlaufen sind.

 

 

VBA für AutoCAD Teil 1   1

Einleitung   2

Einführung in die VBA-Programmierung   3

Ereignisgesteuerte Programmierung  3

Ereignisse in AutoCAD   4

Objekte, Klassen und Instanzen  4

Eigenschaften  4

Methoden  4

Module  5

Standardmodule  5

Klassenmodule  5

Userform   5

Steuerelemente  6

Prozeduren  7

Aufbau einer Sub – Prozedur  7

Aufbau einer Function – Porzedur  7

Die Entwicklungsumgebung  8

Aufrufen des VBA-Editors  8

VBA-IDE (Integrated Developer Environment) 8

Projekt speichern  8

Datei exportieren/importieren  9

Hilfe  9

Der Projektexplorer  10

Projekt automatisch laden  11

Projekt in die laufende AutoCAD-Sitzung laden  11

Projekt entladen  11

Das Eigenschaften-Fenster  12

Das Code-Fenster  12

Funktionskatalog  13

Einstellungen der Entwicklungsumgebung  13

Editoreinstellungen  13

Editorformat 14

Allgemeine Einstellungen  15

Verankern der Fenster  16

Makros  16

Makro  16

Makrodialog  16

VBA-Befehle an der Befehlszeile: 17

VBAIDE  17

VBALOAD   17

VBAUNLOAD   17

VBAMAN   17

Speichern unter  17

Einbetten  17

Laden... 17

Entfernen  17

VBARUN und –VBARUN   18

Makro erstellen  19

Makro – Dialogfenster  20

Makro über Tastaturbefehl Aufrufen  20

Schaltfläche in eine Symbolleiste ziehen  22

Aufruf des Makros  22

Projekte erstellen  22

Userform erstellen  22

Einfügen von Steuerelementen  23

Übung 2: Platzieren von weiteren Steuerelementen  23

Ausführen des Programms  24

Debuggen oder schrittweises Ausführen  24

Formulare aus AutoCAD starten  24

Übung 3: Schaltfläche zum Aufrufen des Formulars  25

Übung 4: Function-Prozedur erstellen  25

Festlegen von Formaten  25

Single (Datentyp) 26

Programmaufruf über CommandButton1  26

Beschreibung des Programmcodes  26

Sprachelemente in VBA   28

Namen und Benennung  28

Namenswahl: Einschränkungen  28

Kommentare  28

Namenskonventionen für Variablen  29

Geschützte Namen  29

Variablen deklarieren  30

Dim   30

Public für öffentliche Variablen  30

Gültigkeitsbereich von Variablen  30

Lebensdauer von Variablen  31

Static  31

Konstanten und deren Einsatz  31

Option explicit  31

Datentypen und Wertebereiche  32

Byte  33

Boolean  33

Integer  33

Long  33

Single  33

Double  33

Currency  33

Decimal 33

Date  34

Object  34

String  34

Benutzerdefinierter Datentyp  35

Variant  35

Empty  35

Null 35

Konvertierung von Datentypen  36

Datentypkonvertierung  36

Text in Zahl umwandeln  36

Fehler bei der Umwandlung  37

Verkettung von Codezeilen  37

Arrays  37

Arrayinhalt auslesen  38

Dynamische Arrays  38

Kontrollstrukturen  39

Entscheidungsstrukturen  39

If...Then...Else  39

Select Case  39

Do While ... Loop  40

Do ... Loop  Until (While) 40

For…next 41

For Each…next 41

Unterbrechen des Programmablaufs  42

Übung 7: Objektnamen einer Zeichnung auslesen  42

Klassenbibliothek bzw. Objektkatalog  42

Beispielcode aus der Hilfe laden  43

Dialogfenster und Meldungen  44

Inputbox  46

Erzeugen von Sub-Prozeduren  47

Unterschied zwischen Function-Prozeduren und Sub-Prozeduren  47

Public und Private Prozeduren  47

Ereignisprozeduren und Function-Prozeduren  47

Aufruf von Prozeduren  47

Übung 8: Sub-Prozedur Layer zählen  47

Übung 9: Aufruf der Funktion Layer zählen  48

Argumente übergeben  48

Prozeduren beenden  48

Zugriff auf Auflistungen und Listenelemente  49

Zeilenschaltung  51