Vba Excel 1
Vba Excel 1
Franz Ertl
Zum Arbeiten mit Excel-Makros gibt es unter dem folgenden Link eine interessante Einführung:
http://office.microsoft.com/training/training.aspx?AssetID=RC011506201031&ofcresset=1
Makro: Code, der einen bestimmten Effekt verursacht und einen eigenen Namen besitzt
VBA: Visual Basic for Applications, die Codesprache für Makros
Modul: ein Container zum Speichern von Makros, der an eine Arbeitsmappe angefügt wird
1
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Modul erstellen
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, bei welchen
Programmcode „ausgelöst“ werden kann.
Das Ereignis „Click“ bedeutet, dass der Programmcode aufgerufen wird, wenn auf das jeweilige Objekt
(Schaltfläche, Nachschlagefeld u.a.) geklickt wird.
2
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Activate SheetActivate
AddinInstall SheetBeforeDoubleClick
AddinUninstall SheetBeforeRightClick
BeforeClose SheetCalculate
BeforePrint SheetChange
BeforeSave SheetDeactivate
Deactivate SheetFollowHyperlink
NewSheet SheetPivotTableUpdate
Open SheetSelectionChange
PivotTableCloseConnection WindowActivate
PivotTableOpenConnection WindowDeactivate
WindowResize
Eigenschaften
Im Inhaltsverzeichnis des VB-Editors (ALT+F11 / Visual Basic Hilfe
finden Sie eine Auflistung der Ereignisse, Methoden, Eigenschaften
(Properties) u.a.
Objekte besitzen bestimmte Eigenschaften.
Hier ein paar Eigenschaften eines Cells-Objektes (Zelle):
Worksheets("Sheet1").Cells(5, 3).Font.Size = 14
Methoden
ActiveWorkbook.Charts.Add
Auf Objekte können Methoden angewendet werden.
Before:=Worksheets(Worksheets.Count)
Methoden beantworten die Frage: "Was kann ich z.B. mit
dem Diagramm machen?"
Zu diesen Methoden zählt z.B. ADD.
3
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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 (Einfügen / Modul) 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.
Klassenmodule
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.
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.
4
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
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
5
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
• Function-Prozeduren
• Sub-Prozeduren
Der Unterschied liegt hauptsächlich darin, dass von einer Function-Prozedur ein Wert zurückgegeben werden
kann, von einer Sub-Prozedur nicht.
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
Die Entwicklungsumgebung
Inhalte dieses Kapitels:
• Bedienung der VBA – Entwicklungsumgebung.
• Was sind Projekte und wie werden sie gespeichert?
• Bedienung des VBA – Editors.
• Umgang mit der Hilfe.
• Die grafischen Objekte in VBA.
• Tricks zum Umgang mit dem Codefenster.
• Wo kann man die Grundeinstellungen ändern?
• Aufrufen von Klassenbibliothek.
6
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
Datei exportieren/importieren
Mit der Option "Datei importieren..." bzw. exportieren können z. B. einzelne Module oder Formulare einzeln
gespeichert oder eingefügt werden.
7
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Hilfe
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.
Wenn Sie in der linken Auswahl auf „Entwicklerhandbuch für ActiveX und VBA“
klicken, öffnet sich die rechts dargestellte Auflistung.
8
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
Arbeitsmappe ausblenden
Windows("Test.xls").Visible = False
9
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Arbeitsmappe einblenden
Menü Fenster / Arbeitsmappe einblenden.
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 „Diese
Arbeitsmappe“ oder Formular-
Steuerelemente gelangen Sie
ebenfalls in das Codefenster.
10
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Funktionskatalog
Drücken Sie in der Code-Ansicht die Taste
F2, dann werden die Funktionen aufgelistet.
Editoreinstellungen
Automatische Syntaxprüfung Prüft auf Schreibfehler im Programmcode
Variablendeklaration Jede Variable, die verwendet wird, muss vorher deklariert werden. Im Modul wird
erforderlich die Zeile „Option explicit“ eingefügt.
11
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Elemente automatisch Elemente, die für ein Objekt verfügbar sind, werden während des Schreibens
auflisten 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 Datentipps Wenn Sie den Mauscursor während des Programmtests auf eine Variable setzen,
wird der Inhalt der Varialen angezeigt.
Drag and Drop bei der Markierter Text kann bei gedrückter linker Maustaste an eine andere Stelle
Textbearbeitung verschoben werden
Standardmäßig ganzes Alle Funktionen innerhalb eines Moduls werden fortlaufend angezeigt
Modul anzeigen
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
12
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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 Sie können einstellen, ob am Raster, ob am Raster ausgerichtet werden soll
Raster ausrichten
Quickinfo anzeigen Zeigt die Quickinfo für die Symbolleistenschaltflächen.
Projektausblendung Legt fest, ob die Projekt-, UserForm-, Objekt- oder Modulfenster automatisch
schließt Fenster geschlossen werden, wenn ein Projekt im Projekt-Explorer ausgeblendet wird.
Benachrichtigung vor Legt fest, ob eine Benachrichtigung erfolgt, dass durch die angeforderte Aktion alle
Zustandsänderung Variablen auf Modulebene für ein laufendes Projekt zurückgesetzt werden.
Bei jedem Fehler Bei jedem Fehler wird für das Projekt der Haltemodus aktiviert,
unterbrechen
In Klassenmodul Bei Fehler im Klassenmodul wird der Haltemodus aktiviert.
unterbrechen
Bei nichtverarbeiteten Wenn eine Fehlerbehandlungsroutine läuft, wird der Fehler behandelt, ohne den
Fehlern unterbrechen Haltemodus zu aktivieren. Der Haltemodus wird aktiviert, wenn keine
Fehlerbehandlungsroutine vorhanden ist.
Kompilieren bei Bedarf Code wird bei Bedarf kompiliert wird, wodurch die Anwendung schneller gestartet
werden kann (sonst beim Start)
Im Hintergrund Leerlaufzeit während der Laufzeit wird für die Kompilierung des Projekts im
kompilieren Hintergrund verwendet.
13
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Makros
Inhalte dieses Kapitels:
• VBA – Befehle.
• Was ist ein Makro?
• Wie erstelle ich ein einfaches Makro?
• Wie rufe ich das Makro auf?
• Wie erstelle ich eine Schaltfläche zum Aufrufen
des Makros?
• Wie rufe ich Prozeduren aus AutoCAD auf?
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 ...).
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ü Tastenkombination
Werkzeuge/Makros... ALT+F8
14
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Sub MeinMakro()
MsgBox „Das ist mein
erstes Programm“
End Sub
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.
15
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
16
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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...
17
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
18
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
19
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Hinweis:
Ohne Angabe eines Datentyps wird automatisch Variant verwendet. Dieser Datentyp kann alle Inhalte
speicher, benötigt aber viel Speicherplatz.
20
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
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.
21
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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))
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:
• Was sind Variablen?
• Welche Namen dürfen für Variablen und Objekte verwendet werden?
• Wie definiert man Kommentare?
• Wie deklariert man Variablen?
• Wie können Datentypen konvertiert werden?
• Was bedeuten die Schlüsselwörter Private und Pulic?
• Was sind Arrays?
• Welche Entscheidungsstrukturen gibt es?
• Was sind Schleifen?
• Wie rufe ich die Klassenbibliothek auf?
22
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Namenswahl: Einschränkungen
• kein Leerzeichen, keinen Punkt (.), Ausrufezeichen (!) oder die Zeichen @, &, $, # am Ende des
Namens weisen einen Datentyp zu
• 1. Zeichen ist ein Buchstabe
• Im Allgemeinen sollten Sie keine Namen verwenden, die bereits durch Funktionen, Anweisungen und
Methoden in Visual Basic verwendet werden, da auf diese Weise die Funktionalität des
entsprechenden Schlüsselworts in der Sprache beeinträchtigt wird. Wenn Sie z.B. eine Variable mit
dem Namen Left verwenden, können Sie die Left-Funktion nur mit VBA.Left aufrufen.
• Sie können Namen innerhalb des gleichen Gültigkeitsbereichs nicht wiederholen. Sie können z.B. nicht
zwei Variablen mit dem Namen Alter innerhalb der gleichen Prozedur deklarieren. Sie können aber
eine private Variablen mit dem Namen Alter und eine Variable auf Prozedurebene mit dem Namen
Alter innerhalb des gleichen Moduls deklarieren.
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.
23
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
24
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
Option explicit
Public appExcel as Word.Application
25
VBA Grundlagen © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
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.
26
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
Benutzerdefiniert Zahl ist von Elementen Der Bereich für jedes Element entspricht dem
(mit Type) abhängig Bereich des zugehörigen Datentyps.
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
(&).
27
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
28
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
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 ($).
29
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
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:
30
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
Datentypkonvertierung
Häufig müssen Werte in einen anderen Datentyp umgewandelt werden. Das geschieht mit den folgenden
Funktionen:
• CBool Boolean
• CByte Byte
• CCur Währung
• CDate Datum
• CDbl Double
• CInt Integer
• CLng Long
• CSng Single
• CStr String
• CVar Variant
• CVErr Error
31
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
Arrays
Variablen können nur einen Wert speichern. Arrays sind in der Lage viele Werte zu speichern. Sie sind
vergleichbar mit einer fortlaufenden Liste. Sie können auch mehrdimensional sein. D.h. mehrere
Dimensionen darstellen. Eine Liste ist eindimensional, ein Excel-Blatt 2-dimensional. Arrays könnten
Skalare darstellen.
Dim varZahl(0 to 100) as Variant
32
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
Dynamische Arrays
Wenn Sie Werte in einem Array speichern möchten, ist beim Programmstart nicht immer klar, wie viele
Werte gespeichert werden sollen. Deshalb kann man das Array ohne Speicherreservierung
deklarieren und später, wenn bekannt ist, wie viele Werte darin gespeichert werden sollen, kann mit
dem Schlüsselwort REDim der Bereich festgelegt werden.
Wurden im Array bereits Werte gespeichert, gehen sie verloren, wenn Sie nicht das Schlüsselwort Preserve
verwenden.
33
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
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:
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.
34
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
35
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
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.
36
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
Das Ergebnis, die Namen der AutoCAD-Objekte, wird in der Variable strObjekte
gespeichert und am Ende in einer einzigen Meldung ausgegeben.
Sub TabellenZaehlen()
MsgBox ActiveWorkbook.Sheets.Count
End Sub
Sub DisplayColumnCount()
Dim iAreaCount As Integer
Beispielcode aus der Hilfe laden Dim i As Integer
Klicken Sie auf „Beispiel“.
Worksheets("Tabelle1").Activate
Markieren und kopieren Sie den Code. iAreaCount = Selection.Areas.Count
Fügen Sie ihn in einem Modul ein.
If iAreaCount <= 1 Then
Debuggen Sie mit der Taste F8. MsgBox "Die Auswahl enthält " & Selection.Columns.Count & "
Der Text aus der Hilfe muss lediglich Spalten."
Else
eingedeutscht werden: „Sheet“ muss For i = 1 To iAreaCount
durch „Tabelle“ ersetzt werden. Evtl. MsgBox "Der erste Bereich der Auswahl enthält " & i _
& Selection.Areas(i).Columns.Count & " Spalten."
sollten Sie auch die Meldung ändern. Next i
End If
End Sub
37
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
Wenn nur eine Meldung ausgegeben werden soll, benötigen Sie keine Klammern.
MsgBox "Sie haben NEIN geklickt"
38
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
Die Buttons können auch durch Zahlenwerte ersetzt werden. Dadurch wird die Funktion aber schwerer
lesbar.
Konstante Wert Beschreibung
vbOKOnly 0 Nur die Schaltfläche OK anzeigen.
VbOKCancel 1 Schaltflächen OK und Abbrechen anzeigen.
VbAbortRetryIgnore 2 Schaltflächen Abbruch, Wiederholen und Ignorieren anzeigen.
VbYesNoCancel 3 Schaltflächen Ja, Nein und Abbrechen anzeigen.
VbYesNo 4 Schaltflächen Ja und Nein anzeigen.
VbRetryCancel 5 Schaltflächen Wiederholen und Abbrechen anzeigen.
VbCritical 16 Meldung mit Stop-Symbol anzeigen.
VbQuestion 32 Meldung mit Fragezeichen-Symbol anzeigen.
VbExclamation 48 Meldung mit Ausrufezeichen-Symbol anzeigen.
VbInformation 64 Meldung mit Info-Symbol anzeigen.
VbDefaultButton1 0 Erste Schaltfläche ist Standardschaltfläche.
VbDefaultButton2 256 Zweite Schaltfläche ist Standardschaltfläche.
VbDefaultButton3 512 Dritte Schaltfläche ist Standardschaltfläche.
VbDefaultButton4 768 Vierte Schaltfläche ist Standardschaltfläche.
VbApplicationModal 0 An die Anwendung gebunden. Der Benutzer muß auf das
Meldungsfeld reagieren, bevor er seine Arbeit mit der aktuellen
Anwendung fortsetzen kann.
VbSystemModal 4096 An das System gebunden. Alle Anwendungen werden
unterbrochen, bis der Benutzer auf das Meldungsfeld reagiert.
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")
39
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
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.
Argumente übergeben
Die Übergabewerte stehen in den Klammern hinter einer Sub- oder Function-Prozedur.
40
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
Prozeduren beenden
Sub-Prozeduren
Public Sub Prozedurname(Argumente)
Exit Sub
End Sub
Function-Prozeduren beenden
Public Function Funktionsname(Argumente)
Exit Function
End Function
Sub ShowDriveList()
Auflistung der verfügbaren Laufwerke On Error Resume Next
Dim fs, d, dc, s, n
Set fs = CreateObject("Scripting.FileSystemObject")
Set dc = fs.Drives
For Each d In dc
s = s & d.DriveLetter & " - "
If d.DriveType = Remote Then
n = d.ShareName
Else
n = d.VolumeName
End If
s = s & n & vbCrLf
Next
MsgBox s
End Sub
Zeilenschaltung
Eine Zeilenschaltung in Meldungen erhalten Sie über „& vbCr“ oder vbLf.
41
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
Objektmodell (Auszug)
Das Application-Objekt
Das Application-Objekt ist allen anderen Objekten übergeordnet. Die Workbooks-Auflistung - also die
Auflistung aller geöffneten Arbeitsmappen - ist dem Application-Objekt untergeordnet.
42
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
Sub AlleDatenLoeschen()
Daten in Excel löschen If MsgBox("Sollen alle Daten gelöscht werden?", vbYesNo) = vbYes Then
Range("A1").Select
Diese Funktion löscht alle Daten der Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
belegten Zellen. Selection.Clear
Range("A1").Select
End If
End Sub
iAlpha: Ergibt sich aus der Teilung des Spaltenwertes Sub testSpalte()
MsgBox fktZahlInBuchstabe(3)
durch 27. Sind es 26 Spalten (= Spalte Z), ist der Wert
End Sub
0.
Es gibt keinen Restwert z.B. für die Spalte AA, die nach Function fktZahlInBuchstabe(ByVal iCol As Integer) As String
der Spalte Z folgt. Dim iAlpha As Integer
Dim iRemainder As Integer
Chr(64) ergibt das große „A“ im ASCII-Zeichensatz.
Debug.Print iCol
Die Zählung geht nach „Z“ mit „AA“ weiter. 'Dim iCol As Integer
'icol = 55
Die Debug.Print-Anweisungen geben das Ergebnis im iAlpha = Int(iCol / 27)
Direktfenster aus.
iRemainder = iCol - (iAlpha * 26)
Debug.Print iRemainder
If iAlpha > 0 Then
fktZahlInBuchstabe = Chr(iAlpha + 64)
Debug.Print fktZahlInBuchstabe
End If
Debug.Print Chr(iAlpha + 64)
If iRemainder > 0 Then
fktZahlInBuchstabe = fktZahlInBuchstabe & Chr(iRemainder
+ 64)
Debug.Print fktZahlInBuchstabe
End If
Debug.Print iAlpha
End Function
43
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
SqlDatum = "#" & lngJ & "/" & lngM & "/" & lngT & "#"
End Function
Set MB = CommandBars.ActiveMenuBar
44
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
Sub subAuswerten()
Patentschriften auswerten Dim i As Integer, lngPos As Integer
Dim str As String
Die rechts dargestellte Routine sucht über eine Select-Case- Dim lngErsteSpalte As Long
Verzweigung nach den Begriffen „PA“, „AD“, „PN“, „TI“ und
lngErsteSpalte = 2 'B
schreibt die rechts daneben stehenden Werte in die Spalten
C, D, E und F in Excel. i=2
Die Grundwerte sind in der Spalte B: Do While Cells(i, lngErsteSpalte) <> ""
------------ Treffer 1 von 123 --------------- str = Cells(i, lngErsteSpalte)
Select Case Left(str, 2)
-------------
Case "--"
PN : DE 102007025187 A1 i=i+1
AD : 30.05.2007 Case "PN"
PA : ebm-papst St. Georgen GmbH & Co. KG, strLetzter = "PN"
78112 St. Georgen, DE lngPos = i
Cells(lngPos, lngErsteSpalte + 1) = fktDP(Cells(i,
TI_DE: Kollektorloser Außenläufermotor lngErsteSpalte))
--------------------------- Treffer 2 von 123 i=i+1
---------------------------- Case "AD"
PN : DE 202007000867 U1 strLetzter = "AD"
Cells(lngPos, lngErsteSpalte + 2) = fktDP(Cells(i,
AD : 20.01.2007 lngErsteSpalte))
PA : ebm-papst St. Georgen GmbH & Co. KG, i=i+1
78112 St. Georgen, DE Case "PA"
TI_DE: Elektromotor strLetzter = "PA"
--------------------------- Treffer 3 von 123 Cells(lngPos, lngErsteSpalte + 3) = fktDP(Cells(i,
lngErsteSpalte))
----------------------------
i=i+1
PN : DE 000004143597 C2 Case "TI"
AD : 22.11.1991 strLetzter = "TI"
PA : Baumüller Nürnberg GmbH, 90482 Nürnberg, Cells(lngPos, lngErsteSpalte + 4) = fktDP(Cells(i,
lngErsteSpalte))
DE
i=i+1
Baumüller Anlagen-Systemtechnik GmbH Case " "
& Co., 90482 Nürnberg, DE Select Case strLetzter
TI_DE: Druckmaschine mit wenigstens einem Case "PA"
elektromotorisch angetriebenen, Cells(lngPos, lngErsteSpalte + 3) = Cells(lngPos,
axial verstellbaren Zylinder oder lngErsteSpalte + 3) & " " & fktDP(Cells(i, lngErsteSpalte))
sonstigen Drehkörper i=i+1
Case "TI"
TI_EN: Electromotor for driving rotating
Cells(lngPos, lngErsteSpalte + 4) = Cells(lngPos,
cylinders of printing machines lngErsteSpalte + 4) & " " & fktDP(Cells(i, lngErsteSpalte))
--------------------------- Treffer 4 von 123 i=i+1
----------------------------
PN : DE 000019545326 C1 End Select
Sub subZaehlen()
Laufende Nummer Dim lngMax As Integer, i As Integer
Die rechts dargestellte Routine fügt in der Spalte A eine laufende i=2
Nummer ein, wenn die Spalte B nicht leer („“) ist. lngMax = 1
Cells(i, 1) = lngMax
lngMax = lngMax + 1
End If
i=i+1
Loop
End Sub
API-Funktion
Zum Auslesen der Festplattennummer (aus www.activevb.de).
Kopieren Sie den folgenden Programmcode in den VBA-Editor.
Sub hddId()
Debug.Print SerNum("c")
End Sub
Option Explicit
Private Declare Sub RtlMoveMemory Lib "kernel32" (hpvDest As Any, ByVal hpvSource&, ByVal cbCopy&)
a$ = Chr$(Val(zeichennext$(addr$, ".")))
a$ = a$ + Chr$(Val(zeichennext$(addr$, ".")))
a$ = a$ + Chr$(Val(zeichennext$(addr$, ".")))
a$ = a$ + Chr$(Val(addr$))
Dim c As String * 5
a$ = "": n% = 0
Do
RtlMoveMemory ByVal c, host.hName + n%, 1
If Left$(c, 1) = Chr$(0) Then Exit Do
a$ = a$ + Left$(c, 1): n% = n% + 1
Loop
HostByAddr$ = a$
End Function
Public Function HostByName$(na$, Optional adapter% = 0) '7
hostent_addr& = gethostbyname(na$)
If hostent_addr& = 0 Then HostByName$ = "": Exit Function
For i% = 0 To adapter% 'Wenn schon eher ein Eintrag 0 ist, dann ist Adapter-Wert zu groß!
RtlMoveMemory hostip_addr&, host.hAddrList + 4 * i%, 4
If hostip_addr& = 0 Then HostByName$ = "": Exit Function
Next
ip_address$ = ""
For i = 1 To host.hLength
ip_address$ = ip_address$ & temp_ip_address(i) & "."
Next
ip_address$ = Left$(ip_address$, Len(ip_address$) - 1)
HostByName$ = ip_address$
End Function
Public Function MyHostName$() '4
End Function
Public Sub SocketsInitialize() '1
MsgBox sMsg$
End
End If
End Sub
Public Sub SocketsCleanup() '6
Dim lReturn&
lReturn& = WSACleanup()
End Sub
Private Function lobyte(ByVal wParam As Integer) '2
End Function
Private Function hibyte(ByVal wParam As Integer) '3
End Function
Private Function zeichennext$(a$, ch$) '5
Dim ai%
If ai% = 0 Then
zeichennext$ = a$: a$ = ""
Else
zeichennext$ = Left$(a$, ai% - 1): a$ = Mid$(a$, ai% + Len(ch$))
End If
End Function
Sub testIp()
Dim hostname As String
Dim strIp_Adresse As String, netzkarte As String, varfestplattennummer As String
49
Anwendungsentwicklung mit VBA © Dipl.-Wirtsch.-Ing. Franz Ertl
SocketsInitialize
hostname = MyHostName$()
'End If
SocketsCleanup
strIp_Adresse = HostByName$(hostname)
SocketsCleanup
End If
varkartenNummer = strIp_Adresse & " / " & netzkarte & " / " & varfestplattennummer
kartenNummer = varkartenNummer
End Sub
Sub hddId()
Debug.Print SerNum("c")
End Sub
50