VBA lernen - René Martin - E-Book

VBA lernen E-Book

René Martin

4,5

Beschreibung

Sie lernen VBA, haben VBA gelernt oder möchten Ihr Wissen über diese Programmiersprache vertiefen? Sie haben konkrete Fragen, die über das Basiswissen hinausgehen? Sie unterrichten VBA? Sie programmieren regelmäßig mit VBA? Dieses Buch gibt theoretisches und praktisches Wissen für das Erlernen von VBA wieder: zum Beispiel das Vergeben fortlaufender Rechnungsnummern, das Erstellen von Rechnungsformularen, der automatisierte Vergleich zweier Excellisten, das Schreiben von Daten eines Tabellenblatts auf ein anderes oder das Auslesen von Informationen aus Visio oder PowerPoint. Praktische Übungen zu den verschiedenen Aspekten von VBA mit Word, Excel, aber auch Hinweise für die Arbeit mit PowerPoint, Outlook und Visio sowie eine Fülle von Tipps und Tricks für die tägliche Programmierpraxis mit VBA runden das Ganze ab. Aus dem Inhalt: Operatoren, Verknüpfungen und Verzweigungen, Schleifen, Fehler, Dialoge, Klassen, Aufrufe und Parameterübergaben, selbsterzeugte Funktionen, Dateizugriff und XML, das Menüband (Ribbon), das Objektmodell von Word, Excel, PowerPoint, Outlook und Visio und der Austausch zwischen den Programmen.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 446

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
4,5 (18 Bewertungen)
12
3
3
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz veröffentlicht. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt

Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen.

Trotzdem können Fehler nicht vollständig ausgeschlossen werden.

Verlag, Herausgeber und Autor können für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen.

Für Verbesserungsvorschläge ist der Autor dankbar.

Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in elektronischen Medien

Für alle Hardware und Softwarebezeichnungen, die in diesem Buch erwähnt werden, sind gleichzeitig auch eingetragene Warenbezeichnungen oder sollten als solche betrachtet werden.

1 Inhaltsverzeichnis

2 Vorwort

2.1 Aufbau des Buches

2.2 Aufbau des Buches

3 Grundlagen

3.1 Die Syntax einer Prozedur

3.2 Kommentare

3.3 Programmzeilen

3.4 Variablen und Datentypen

3.5 Konstanten

3.6 Datenfelder, Arrays

3.7 Deklarieren eines festen Datenfelds

3.8 Deklarieren eines dynamischen Datenfeldes

3.9 Ein- und Ausgabe

3.10 Übungen zu den Grundlagen

3.11 Tipps zu den Übungen zu den Grundlagen

3.12 Lösungen zu den Übungen zu den Grundlagen

4 Operatoren, Verknüpfungen und Verzweigungen

4.1 Operatoren

4.2 Verzweigungen I

4.3 Verzweigungen II

4.4 Verzweigungen III

4.5 Verzweigungen IV

4.6 Informationsabfragen

4.7 Übungen zu Operatoren, Verknüpfungen und Verzweigungen

4.8 Tipps zu den Übungen zu Operatoren, Verknüpfungen und Verzweigungen

4.9 Lösungen zu den Übungen zu Operatoren, Verknüpfungen und Verzweigungen

5 Eingebaute Funktionen

5.1 Die mathematischen Funktionen:

5.2 Die finanzmathematischen Funktionen:

5.3 Die String-Funktionen

5.4 Die Uhrzeit- und Datumsfunktionen

5.5 Die Funktion Format

5.6 Umwandlungsfunktionen

5.7 Übungen zu den mathematischen Funktionen

5.8 Übungen zu den Textfunktionen

5.9 Übungen zu den Datumsfunktionen

5.10 Übungen zu den Formatfunktionen

5.11 Tipps zu den Übungen zu den Funktionen

5.12 Lösungen zu den Übungen zu den Funktionen

6 Selbsterzeugte Funktionen, Aufrufe, Parameterübergabe

6.1 Aufruf

6.2 Globale Variablen

6.3 Übergabe

6.4 Übungen zu selbsterzeugten Funktionen, Aufrufen und Parameterübergaben

6.5 Lösung zu den Übungen zu selbsterzeugten Funktionen

7 Schleifen, rekursives Programmieren

7.1 Zählerschleifen

7.2 Bedingungsschleifen

7.3 Rekursionen

7.4 Übungen zu den Schleifen

7.5 Tipps zu den Übungen zu den Schleifen

7.6 Lösungen zu den Übungen zu den Schleifen

8 Dateizugriff

8.1 Der Zugriff auf Dateien

8.2 Übungen zum Zugriff auf die Dateien

8.3 Tipps zu den Übungen zum Zugriff auf die Dateien

8.4 Lösungen zu den Übungen zum Zugriff auf die Dateien

8.5 Dateisystemobjekte (File System Objects, FSO)

8.6 Übungen zum FileSystemObject

8.7 ini-Dateien

8.8 Übungen zu den ini-Dateien

8.9 Lösungen zu den Übungen zu den ini-Dateien

8.10 Zugriff auf die Registry

8.11 Übung zum Zugriff auf die Registry

8.12 Lösung zur Übung zum Zugriff auf die Registry

8.13 Sequentielle Dateien

8.14 Übungen zu den sequentiellen Dateien

8.15 Tipp zu den Übungen zu den sequentiellen Dateien

8.16 Lösungen zu den Übungen zu den sequentiellen Dateien

8.17 XML-Dateien

8.18 Übungen zu XML-Dateien

9 Klassen

9.1 Was sind Klassen?

9.2 Eigenschaften von Objekten

9.3 Methode

3.2. Sammlungen

3.3. Ereignisse in Klassen

9.4 Übungen zu den Klassen

9.5 Lösungen zu den Übungen zu den Klassen

10 Fehler

10.1 Programmierfehler

10.2 Fehler zur Laufzeit

10.3 Übungen zu den Fehlerbehandlungen

10.4 Lösungen zu den Übungen zu den Fehlerbehandlungen

11 Externe DLLs aufrufen

11.1 Aufruf einer API-Funktion

11.2 Die Declare-Anweisung

11.3 Beispiele für den Einsatz von APIs

12 Userforms (Dialoge, Formulare, Masken)

12.1 Dialog und Befehlsschaltfläche

12.2 Übungen zur Dialogbox und zu den Befehlsschaltflächen

12.3 Tipps zu den Aufgaben der Dialogbox und zu den Befehlsschaltflächen

12.4 Lösungen zu den Aufgaben der Dialogbox und zu den Befehlsschaltflächen

12.5 Textfelder, Beschriftungsfelder und Anzeige

12.6 Übungen zu den Textfeldern und den Bezeichnungsfeldern

12.7 Tipps zu den Übungen zu Textfeldern und den Bezeichnungsfeldern

12.8 Lösungen zu den Übungen zu Textfeldern und den Bezeichnungsfeldern

12.9 Rahmen, Optionsfeld, Kontrollkästchen und Umschaltfeld

12.10 Übungen zu Rahmen, Optionsfeld, Kontrollkästchen und Umschaltfeld

12.11 Tipps zu den Übungen zu Rahmen, Optionsfeld und Kontrollkästchen

12.12 Lösungen zu den Übungen zu Rahmen, Optionsfeld und Kontrollkästchen

12.13 Kombinationsfeld und Listenfeld

12.14 Übungen zu Kombinationsfeld und Listenfeld

12.15 Tipps zu den Übungen zu Kombinationsfeld und Listenfeld

12.16 Lösungen zu den Übungen zu Kombinationsfeld und Listenfeld

12.17 Bildlaufleiste und Drehfeld

12.18 Übungen zu Bildlaufleiste und Drehfeld

12.19 Tipps zu den Übungen zu Bildlaufleiste und Drehfeld

12.20 Lösungen zu den Übungen zu Bildlaufleiste und Drehfeld

12.21 Register und Multiseiten

12.22 Übungen zu Registern und Multiseiten

12.23 Tipps zu den Übungen zu Register und Multiseiten

12.24 Lösungen zu den Übungen zu Register und Multiseiten

12.25 Steuerelemente zur Laufzeit erzeugen

12.26 Übungen zu Steuerelemente zur Laufzeit erzeugen

12.27 Tipps zu den Übungen zu Steuerelemente zur Laufzeit erzeugen

12.28 Lösungen zu den Übungen zu Steuerelemente zur Laufzeit erzeugen

12.29 Weitere Steuerelemente

13 Word VBA

13.1 Programmzugriff (Application)

13.2 Dateizugriff

13.3 Übungen zum Dateizugriff

13.4 Lösungen zu den Übungen zum Dateizugriff

13.5 Bewegen, Markieren, Markierung auslesen

13.6 Übungen zum Bewegen, Markieren, Markierung auslesen

13.7 Tipps zu den Übungen zum Bewegen, Markieren, Markierung auslesen

13.8 Lösungen zu den Übungen zum Bewegen, Markieren, Markierung auslesen

13.9 Position des Cursors bestimmen

13.10 Range – ein polymorphes Wesen

13.11 Übungen zum Objekt Range

13.12 Tipps zu den Übungen zum Objekt Range

13.13 Lösungen zu den Übungen zum Objekt Range

13.14 Tabellen

13.15 Übungen zu den Tabellen

13.16 Tipps zu den Übung zu den Tabellen

13.17 Lösungen zu den Übung zu den Tabellen

13.18 Formularfelder

13.19 Übungen zu den Formularfeldern

13.20 Tipps zu den Übungen zu den Formularfeldern

13.21 Lösungen zu den Übungen zu den Formularfeldern

13.22 Ereignisse in Word

13.23 Übungen zu den Ereignissen in Word

13.24 Tipps zu den Übungen zu den Ereignissen in Word

13.25 Lösungen zu den Übungen zu den Ereignissen in Word

13.26 Einige nützliche, erstaunliche und lustige Befehle

14 Das Objektmodell von Excel

14.1 Programmzugriff

14.2 Dateizugriff

14.3 Zugriff auf Tabellenblätter

14.4 Übungen zum Programmzugriff, Dateizugriff, Tabellenzugriff

14.5 Lösungen zu den Übungen zum Programmzugriff, Dateizugriff, Tabellenzugriff

14.6 Zugriff auf Zellen

14.7 Zeilen und Spalten

14.8 Rechnen in Excel

14.9 Zugriff auf Zeichen innerhalb einer Zelle

14.10 Hilfsmittel in Excel

14.11 Übungen zum Zellzugriff

14.12 Tipp zu den Übungen zum Zellzugriff

14.13 Lösungen zu den Übungen zum Zellzugriff

14.14 Diagramme

14.15 Ereignisse in Excel

14.16 Übungen zu den Ereignissen

14.17 Lösungen zu den Übungen zu den Ereignissen

14.18 Einige nützliche, erstaunliche und lustige Befehle

15 Das Objektmodell von PowerPoint

15.1 Datei- und Programmzugriff

15.2 Folien

15.3 Folienhintergründe

15.4 Objekte auf Folien

15.5 Besonderheiten bei der PowerPoint-Programmierung

15.6 Übungen zu PowerPoint

15.7 Lösungen zu den Übungen zu PowerPoint

16 Zugriff auf Visio

16.1 Die oberste Ebene: Application

16.2 Das Document-Objekt

16.3 Schablonen

16.4 Seiten (das Page-Objekt)

16.5 Shape-Zugriff

16.6 Neue Shapes zeichnen

17 Das Objektmodell von Outlook

17.1 Neue Elemente erzeugen

17.2 Das Namespace-Objekt

17.3 Die Items

17.4 Ereignisse in Outlook

17.5 Übung zu Outlook

17.6 Lösung zur Übung zu Outlook

18 Austausch zwischen den Programmen

18.1 Ein Programm aus einem anderen starten

18.2 Zugriff auf Office-Programme

18.3 Übungen zum Programmaustausch Word nach Excel

18.4 Lösungen zu den Übungen zum Programmaustausch Word nach Excel

18.5 Übungen zum Programmaustausch Excel nach Word

18.6 Lösungen zu den Übungen zum Programmaustausch Excel nach Word

18.7 Übung zum Programmaustausch Outlook nach Word und Excel

18.8 Lösung zum Programmaustausch Outlook nach Word und Excel

18.9 Übung zum Programmaustausch Visio nach Excel

18.10 Lösung zur Übung zum Programmaustausch Visio nach Excel

19 Guter Code – ein Vorschlag

19.1 Code

19.2 Programmierstil und Programmierstrategien

19.3 Fazit

20 Stichwortverzeichnis

2 Vorwort

VBA existiert nun seit mehr als 20 Jahren. Dies mag in der Vormachtstellung von Microsoft bei Anwendungsprogrammen wie Word, Excel oder PowerPoint begründet liegen, dies kann aber auch in der relativ einfach erlernbaren Programmiersprache begründet sein. Access war das erste Produkt aus der Microsoft-Office-Palette, das schon in der Version 2.0 VBA mitlieferte. In dieser Datenbank war dies ein notwendiger Schritt, denn für die Erstellung einer Datenbank wird fast immer Programmierung benötigt. Excel zog in der Version 5.0 nach, in Word wurde WordBasic durch VBA in Office 97 ersetzt. In der gleichen Version hielt VBA auch Einzug in PowerPoint und Outlook.

Heute, im Frühjahr des Jahres 2016, ist die Zahl der Anwendungen, die VBA integriert haben, immens: Zur Microsoft-Palette gesellen sich Visio und Project, daneben sind noch weitere Programme wie Flowcharter, Corel Draw, AutoCAD und andere zu nennen. Die Verbreitung und die Beliebtheit von VBA wächst, und mit ihr die Notwendigkeit, VBA zu lernen. Während noch vor Jahren ein guter Freund von mir, ein hervorragender Java-und C++-Programmierer, VBA-Programmierer als „Warmduscher“ verspottete, so musste er später zugeben, dass man nicht mit solch mächtigen Programmiersprachen wie Java, C++ oder VB.NET auf „Spatzen“ schießen sollte, wenn es darum geht, innerhalb einer Applikation Lösungen zu entwickeln. Und genau das will VBA.

Auch wenn diese Programmiersprache Merkmale anderer objektorientierter Sprachen vermissen lässt (Multithreading, Vererbung und Polymorphismus), so liegt mit VBA 7.1 dennoch ein mächtiges, vielschichtiges und komplexes Werkzeug vor, mit dem man gute Lösungen für die Microsoft-Office-Produkte erstellen kann.

2.1 Aufbau des Buches

VBA untergliedert sich in drei Bereiche. Zum einen ist der Sprachkern selbst zu nennen: der Teil von VBA, der sich auch in VB.NET befindet. Ihm sind die ersten elf Kapitel gewidmet, dort werden die typischen Anforderungen, die beim Erlernen einer Programmiersprache nötig sind, wiederholt und eingeübt. Dazu zählen die schon „klassischen“ Themen Variablendeklaration, Schleifen, Verzweigungen, Fehlerbehandlung. Schließlich sollen die VBA-spezifischen Themen eingebaute und selbstdefinierte Funktionen, Dateizugriff und Klassen besprochen werden.

Der zweite Teil (Kapitel 12) widmet sich den Dialogen („Userforms“). Für den bequemen Umgang mit den Makros wird dem Benutzer eine Eingabemaske zur Verfügung gestellt, in die er Daten eintragen, aus vordefinierten Listen etwas auswählen oder über Optionsbuttons und Kontrollkästchen eine Auswahl treffen kann. Auch wenn Sie keine Dialoge benötigen, so halte ich dieses zwölfte Kapitel für wichtig, da man anhand von Dialogen exemplarisch den Umgang mit Objekten erläutern und studieren kann.

Der dritte Teil des Buchs (Kapitel 13 – 18) ist schließlich dem „A“ in VBA gewidmet: Es geht um die Applikationen. Lange habe ich überlegt, welche der Anwendungsprogramme ich dabei behandle. Schließlich habe ich mich gegen Access entschieden. Der Grund ist einfach. Zum Ersten stellt Access zwei Zugriffsmöglichkeiten auf Tabellen und Abfragen zur Verfügung: DAO und ADO. Man müsste sie beide beschreiben. Zum Zweiten werden die Formulare in Access programmiertechnisch anders gesteuert als in Word, Excel und Visio. Zum Dritten unterscheidet sich die Programmierumgebung von den anderen Applikationen, ebenso wie einige VBA-Befehle in Access anders lauten. Aus diesen Gründen habe ich mich gegen Access entschieden. Dafür habe ich den „Spitzenreitern“ von VBA – Word und Excel – den größten Platz eingeräumt. Und schließlich enthält dieses Buch jeweils ein kleines Kapitel über Visio, PowerPoint und eines über Outlook.

2.2 Aufbau des Buches

Dennoch: Vollständigkeit kann ich nicht erlangen: Bei XML (Kapitel 8.17) habe ich nur das Zugriffsmodell DOM beschrieben, nicht SAX. Ich habe nicht gezeigt, wie man in Excel Pivottabellen programmiert oder was man beachten muss, wenn man eigene Funktionen für Excel erstellt. Wie man in Visio überprüft, ob ein Shape auf einem bestimmten Layer liegt. Wie man weitere Steuerelemente in die Dialoge einbaut. Ich habe kein Wort über das Starten der Makros verloren: an welche Elemente man sie binden kann, wie man in der Multifunktionsleiste neue Registerkarten einfügt und diese mit Symbolen bestückt. Da jedes der Anwendungsprogramme Tausende von Objekten, Methoden, Eigenschaften, Ereignisse und Konstanten zur Verfügung stellt, ist schon klar, dass dieses Buch keine Referenz darstellt. Dafür sei auf weitere Literatur zu den einzelnen Programmen verwiesen. Dennoch: Ich glaube, dass Sie mit diesem Wissen einen sehr guten Überblick über und Einblick in die Programmsprache VBA erhalten.

Nun bleibt mir nur noch, Ihnen viel Spaß beim Lesen des Buchs zu wünschen.

René Martin

im März 2016

Über Anregungen, Bemerkungen und Kritik freue ich mich:

[email protected]

Die Beispiele können Sie von meiner Seite

www.compurem.de dort: Autorentätigkeit / Downloads (Bücher) herunterladen.

3 Grundlagen

Um überhaupt mit den einfachsten Übungen beginnen zu können, müssen Sie grundlegende Kenntnisse von VBA besitzen. Lassen Sie uns mit dem allgemeinen Aufbau von Prozeduren beginnen. In einem Modul wird eine Prozedur (ein Makro) erstellt.

3.1 Die Syntax einer Prozedur

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

[Anweisungen]

[Exit Sub]

[Anweisungen]

End Sub

Dabei bedeuten:

TeilBeschreibungPublicAuf die Sub-Prozedur kann von allen anderen Prozeduren in allen Modulen zugegriffen werden. Bei Verwendung in einem Modul kann auf die Prozedur nur innerhalb des Projekts zugegriffen werden.PrivateAuf die Sub-Prozedur kann nur durch andere Prozeduren aus dem Modul zugegriffen werden, in dem sie deklariert wurde.StaticDie lokalen Variablen der Sub-Prozedur bleiben zwischen Aufrufen erhalten. Das Attribut „Static“ wirkt sich nicht auf Variablen aus, die außerhalb der Sub-Prozedur deklariert wurden, auch wenn sie in der Prozedur verwendet werden.NameErforderlich. Name der Sub-Prozedur gemäß den Standardkonventionen für Namen von Variablen: Maximal 255 Zeichen, kein Schlüsselwort und eindeutig. Der Name darf nicht mit einer Ziffer beginnen und keine Satz- oder Sonderzeichen enthalten.ArgListeVariablenliste mit den Argumenten, die an die Sub-Prozedur beim Aufruf übergeben werden. Mehrere Variablen werden durch Kommas getrennt.AnweisungenEine beliebige Gruppe auszuführender Anweisungen im Rumpf der Sub-Prozedur.

Tabelle 1: Die Elemente eines Prozedurnamens

3.2 Kommentare

Kommentare werden mit einem Apostroph „'“ eingeleitet, das am Anfang einer Zeile oder am Ende einer Codezeile stehen kann. Kommentare können ebenso durch ein rem (remark) eingeleitet werden, welches sich nur am Anfang der Zeile befinden darf. Für den Apostroph steht Ihnen in der Symbolleiste „Bearbeiten“ ein Symbol zum Ein- und Ausschalten zur Verfügung. Kommentare erscheinen in grüner Schrift, was Sie im Menü Extras / Optionen im Blatt Editorformen unter der „Codefarbe“ Kommentartext ändern könnten.

3.3 Programmzeilen

Ein automatischer Umbruch, wie von der Textverarbeitung bekannt, findet erst nach 1.024 Zeichen statt: Um einen manuellen Umbruch zu organisieren, kann der Text in mehrere Zeilen geteilt werden. Dies erfolgt durch eine obligatorische Leerstelle, der ein Unterstrich am Ende der Zeile folgt.

Sie dürfen maximal zehn Zeilen Code durch „_“ voneinander trennen. Und der Unterstrich darf nicht innerhalb von Textteilen stehen.

Sollen mehrere Befehle in einer Zeile geschrieben werden, dann können diese durch einen Doppelpunkt voneinander getrennt werden.

3.4 Variablen und Datentypen

Variablen werden deklariert mit:

Dim Variablenname As Variablentyp

Sie sollten (müssen es nicht) Variablen am Anfang einer Prozedur deklarieren – dies erhöht die Lesbarkeit. Die folgende Tabelle liefert eine Zusammenfassung der verschiedenen Variablentypen:

DatentypVariablentypTypenkennzeichenBereichTypkürzelBeispielSpeicherplatz (in Bytes) Boolean 0 (False) und -1 (True)f oder bolTrue, False2GanzzahlenByte 0 bis 255byt7, 1041 Integer%-32.768 bis 32.767int7, 104, 12342 Long&-2.147.483.648 bis 2.147.483.647lng1234567894DezimalzahlenSingle!-3,402823 × 1038 bis 3,402823 × 1038sng0,154 Double#-1,797693 × 10324 bis 1,797693 × 10324dbl12345678 * 101008 Currency@–9,22 × 1014 bis 9,22 × 1014cur59,90 Euro8DatumzahlenDate 1.1.100 bis 31.12.9999dat11.11.20178TextString$Circa 2 Milliardenstr„Der Weiße Riese“, „Konrad und Paul“10 + Länge der Zeichenkette Variant jeder numerische Wert im Bereich Double, jeder String  22 + Länge der ZeichenketteObjekteObject alle Objektreferenzen  4

Benutzerdefinierter Datentyp (siehe Seite →)

Tabelle 2: Die verschiedenen Variablentypen

Variablen sollten ein Präfix besitzen, an dem ihr Typ erkennbar ist. Diese Konvention, die von der Firma „Gregory Reddick & Associates“, einer Unternehmensberatungsfirma von Microsoft, herausgegeben wurde, ist nicht verbindlich. Allerdings arbeiten sehr viele Programmierer damit. Diese Konvention stellt eine Möglichkeit der Standardisierung für VBA-Programmierung dar.

Aus den vorgegebenen Datentypen können Sie auch eigene Datentypen zusammensetzen.

[Private | Public] Type VarName

Elementname [([Indizes])] As Typ

[Elementname [([Indizes])] As Typ]

...

End Type

Beispielsweise:

Public Type Fahrrad

Farbe As String

Anschaffungspreis As Currency

Marke As String

Gewicht As Double

End Type

Sub Verwendung()

Dim MeinFahrrad As Fahrrad

MsgBox MeinFahrrad.Anschaffungspreis

End Sub

3.5 Konstanten

Die Syntax der Const-Anweisung besteht aus folgenden Teilen:

TeilBeschreibungPublicSchlüsselwort, das auf Modulebene Konstanten deklariert, die allen Prozeduren in allen Modulen zur Verfügung stehen.PrivateSchlüsselwort, das auf Modulebene Konstanten deklariert, die nur innerhalb des Moduls verfügbar sind, in dem sie deklariert wurden.KonstNameErforderlich. Name der Konstanten.TypZulässige Typen sind Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String oder Variant.AusdruckErforderlich. Ein Literalwert, eine andere Konstante oder eine beliebige Kombination, die beliebige arithmetische oder logische Operatoren (mit Ausnahme von Is) enthält.

Tabelle 3: Die Syntax der Const-Anweisung

3.6 Datenfelder, Arrays

Datenfelder werden genauso wie andere Variablen mit Hilfe der Dim-, Static-, Private-oder Public-Anweisungen deklariert. Der Unterschied zwischen „skalaren Variablen“ (Variablen, die keine Datenfelder sind) und „Datenfeldvariablen“ besteht darin, dass Sie generell die Größe des Datenfelds angeben müssen. Ein Datenfeld, dessen Größe angegeben ist, ist ein Datenfeld fester Größe. Ein Datenfeld, dessen Größe bei Ausführung eines Programms geändert werden kann, ist ein dynamisches Datenfeld.

Ob ein Datenfeld mit 0 oder 1 beginnend indiziert ist, hängt von der Einstellung der Option Base-Anweisung ab. Wenn Option Base 1 nicht angegeben ist, beginnen alle Datenfelder mit dem Index 0.

3.7 Deklarieren eines festen Datenfelds

In der folgenden Code-Zeile wird ein Datenfeld fester Größe als Integer-Datenfeld mit 11 Zeilen und 11 Spalten deklariert:

Dim intMeinDatenfeld(10, 10) As Integer

Das erste Argument stellt die Zeilen, das zweite Argument die Spalten dar.

Wie bei jeder anderen Variablendeklaration entspricht der Datentyp der Elemente in einem deklarierten Datenfeld dem Typ Variant, solange Sie keinen Datentyp für das Datenfeld angegeben haben. Jedes Variant-Element des Datenfelds verwendet 16 Bytes. Deklarieren Sie Ihre Datenfelder explizit mit einem Datentyp, der nicht Variant ist, um den Code so kompakt wie möglich zu machen!

Die folgenden Code-Zeilen vergleichen die Größe verschiedener Datenfelder:

' Nachstehendes Datenfeld aus Elementen des Datentyps

' Integer beansprucht 22 Bytes (11 Elemente * 2 Bytes).

ReDim intMeinIntegerDatenfeld(10) As Integer

' Nachstehendes Datenfeld aus Elementen des Datentyps

' Double beansprucht 88 Bytes (11 Elemente * 8 Bytes).

ReDim dblMeinDoubleDatenfeld(10) As Double

' Nachstehendes Datenfeld aus Elementen des Datentyps Variant

' beansprucht mindestens 176 Bytes (11 Elemente * 16 Bytes).

ReDim MeinVariantDatenfeld(10)

' Nachstehendes Datenfeld aus Elementen des Datentyps

' Integer beansprucht 100 * 100 * 2 Bytes (20.000 Bytes).

ReDim intMeinIntegerDatenfeld (99, 99) As Integer

' Nachstehendes Datenfeld aus Elementen des Datentyps

' Double beansprucht 100 * 100 * 8 Bytes (80.000 Bytes).

ReDim dblMeinDoubleDatenfeld (99, 99) As Double

' Nachstehendes Datenfeld aus Elementen des Datentyps Variant

' beansprucht mindestens 160.000 Bytes

' (100 * 100 * 16 Bytes).

ReDim MeinVariantDatenfeld(99, 99)

Die maximale Größe eines Datenfelds hängt von Ihrem Betriebssystem sowie von dem verfügbaren Speicher ab. Durch die Verwendung eines Datenfeldes, das den für Ihr System verfügbaren RAM-Speicher überschreitet, wird Ihre Anwendung langsamer, da die Daten von der Festplatte gelesen und auf diese geschrieben werden müssen.

3.8 Deklarieren eines dynamischen Datenfeldes

Bei der Deklaration eines dynamischen Datenfelds können Sie die Größe des Datenfelds verändern, während der Code ausgeführt wird. Verwenden Sie zur Deklaration eines Datenfelds eine der Static-, Dim-, Private- oder Public-Anweisungen, und lassen Sie die Klammern leer. Beispiel:

Dim sngDatenfeld() As Single

Anmerkung: Sie können die ReDim-Anweisung dazu verwenden, ein Datenfeld implizit innerhalb einer Prozedur zu deklarieren. Achten Sie darauf, bei Verwendung der ReDim-Anweisung den Namen des Datenfelds richtig zu schreiben. Auch wenn sich die Option Explicit-Anweisung im Modul befindet, wird ein zweites Datenfeld erstellt.

Verwenden Sie in einer Prozedur innerhalb des Gültigkeitsbereichs des Datenfeldes die ReDim-Anweisung zur Änderung der Anzahl von Dimensionen, zur Definition der Anzahl der Elemente und zur Definition der oberen und unteren Grenzen jeder Dimension. Sie können die ReDim-Anweisung beliebig oft verwenden, um das dynamische Datenfeld zu ändern. Dies hat jedoch zur Folge, dass die bestehenden Werte des Datenfeldes verloren gehen. Verwenden Sie ReDim Preserve, um ein Datenfeld zu erweitern, ohne dass die vorhandenen Werte im Datenfeld gelöscht werden. Die folgende Anweisung vergrößert z.B. das Datenfeld varDatenfeld um 10 Elemente, ohne die aktuellen Werte der ursprünglichen Elemente zu löschen.

ReDim Preserve varDatenfeld (UBound(varDatenfeld) + 10)

Wenn Sie das Schlüsselwort Preserve mit einem dynamischen Datenfeld verwenden, können Sie nur die obere Grenze der letzten Dimension, aber nicht die Anzahl der Dimensionen ändern.

3.9 Ein- und Ausgabe

Zwei einfache Möglichkeiten zur Ein- und Ausgabe stehen Ihnen über das Meldungsfenster und das Eingabefenster zur Verfügung:

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

InputBox(prompt[, title] [, default] [, xpos] [, ypos] _

[, helpfile, context])

Wird bei der MsgBox eine Klammer verwendet, dann wird ein Wert vom Typ Integer zurückgegeben. Die InputBox gibt immer einen String-Wert zurück.

3.10 Übungen zu den Grundlagen

In den folgenden Programmen befinden sich Fehler. Finden Sie diese heraus und überlegen Sie sich, wie man sie korrigieren könnte:

Übung 1

Sub Mein erstes Makro()

MsgBox "Hallo"

End Sub

Übung 2

Sub Gruß()

MsgBox(Prompt:="Guten Morgen")

End Sub

Übung 3

Sub Ende1()

MsgBox "Diese Anweisung wird aufgrund eines ungültigen _

Vorgangs geschlossen.", vbCritical

End Sub

Übung 4

Sub Ende2()

MsgBox _

"Wenden Sie sich an den Hersteller, " & _

"falls das Problem weiterhin besteht.", _

vbCritical rem Keine schöne Meldung

End Sub

Übung 5

Sub Wertezuweisen()

Dim strJahreszeit(4) As String

Dim i As Integer

End Sub

Übung 6

Sub Wertezuweisen2()

Dim strHimmelsrichtung() As String

ReDim strHimmelsrichtung(0)

ReDim strHimmelsrichtung(1)

ReDim strHimmelsrichtung(2)

ReDim strHimmelsrichtung(3)

End Sub

3.11 Tipps zu den Übungen zu den Grundlagen

Achten Sie genau auf die Schreibweise, auf Leerzeichen, auf korrekte Umbrüche und auf korrekt deklarierte Variablen!

3.12 Lösungen zu den Übungen zu den Grundlagen

Lösung 1

Der Name der Prozedur Mein erstes Makro darf kein Leerzeichen enthalten. Ein korrekter Name für ein Makro wäre beispielsweise:

Mein_erstes_Makro

oder:

MeinErstesMakro

Lösung 2

Wird das Meldungsfenster mit einer Klammer verwendet, dann muss ein Wert übergeben werden. Also beispielsweise so:

Da das Meldungsfenster aber keine Auswahlabfrage wie YesNo oder AbortRetryIgnore enthält, genügt zur alleinigen Anzeige folgender Befehl:

MsgBox Prompt:="Guten Morgen"

Oder auch mit Leerzeichen:

MsgBox "Guten Morgen"

Übrigens: Erstaunlichweise funktioniert:

MsgBox("Guten Morgen")

Jedoch nicht:

MsgBox("Guten Morgen", vbInformation)

Das ist leider nicht konsequent!

Lösung 3

Der Umbruch zwischen Befehlen darf nur zwischen Parametern oder Befehlsteilen stehen, nicht aber innerhalb von Text. Wenn Sie Text umbrechen möchten, dann bitte so:

MsgBox "Diese Anweisung wird aufgrund eines ungültigen " & _

"Vorgangs geschlossen.", vbCritical

Lösung 4

Kommentare, die mit rem eingeleitet werden, dürfen nicht hinter Befehlen stehen. Entweder verwenden Sie das Anführungszeichen oder schreiben Sie die Remark-Zeile als eigenständige Zeile.

Lösung 5

Arrays beginnen, wenn nichts Anderes festgelegt wird, bei 0. Das heißt, LBound(strJahreszeiten) liefert einen leeren String. Dies kann umgangen werden, indem ebenfalls bei strJahreszeiten(1) begonnen wird oder indem die Zählung explizit mit 1 beginnt. Entweder durch den allgemeinen Befehl:

Option Base 1

oder indem die Variable folgendermaßen deklariert wird:

Dim strJahreszeiten(1 To 4) As String

Lösung 6

Wenn Sie das Datenfeld vergrößern:

ReDim strHimmelsrichtung(3)

und anschließend füllen:

werden die übrigen Einträge gelöscht, das heißt: strHimmelsrichtung(0), strHimmelsrichtung(1) und strHimmelsrichtung(2) sind leer. Sie sollten jeweils mit

ReDim Preserve strHimmelsrichtung(3)

das Datenfeld vergrößern.

4 Operatoren, Verknüpfungen und Verzweigungen

4.1 Operatoren

Folgende Operatoren stehen Ihnen in VBA zur Verfügung:

TypBeschreibungZeichen / OperatorArithmetische OperatorenAddition+ Subtraktion-Multiplikation* Division/ Ganzzahlige Division\ Potenz^ ModuloModTextverkettungConcatenation&, +Logische OperatorenundAND oderOR nichtNOTexklusives oder (entweder das eine oder das andere)XOR logische ÄquivalenzEQV ImplikationIMPVergleichsoperatorengleich kleiner als< kleiner oder gleich<= größer als> größer oder gleich>= ungleich<>Vergleichsoperatoren für TextentsprichtLIKEVergleichsoperatoren für ObjekteentsprichtIS

Tabelle 4: Die Operatoren in VBA

Die Verknüpfungsmöglichkeiten können in einer Tabelle aufgelistet werden:

Wert 1Wert 2AndOrXorImpEqvWahrWahrWahrWahrFalschWahrWahrWahrFalschFalschWahrWahrFalschFalschFalschWahrFalschWahrWahrWahrFalschFalschFalschFalschFalschFalschWahrWahrWahrLeerFalschWahrWahrFalschFalschFalschLeerFalschFalschFalschWahrWahrLeerWahrFalschWahrWahrWahrFalschLeerFalschFalschFalschFalschWahrWahr

Tabelle 5: Die Konjunktoren in VBA

Das Gleichheitszeichen hat in VBA zwei Bedeutungen: Es übergibt einen Wert an eine Variable:

oder es vergleicht den Inhalt einer Variablen mit einem Wert:

Während mit dem Vergleichsoperator „=“ nur exakte Gleichheit überprüft werden kann, kann mit Like mit Platzhaltern gearbeitet werden. Beispiele:

ergibt „True“.

ergibt dagegen „False“. „True“ liefern folgende drei Vergleiche:

"Struwwelpeter" Like "Struwwel*"

"Struwwelpeter" Like "*peter"

"Struwwelpeter" Like "S?ruwwelpe?er"

„False“ ist das Ergebnis von folgendem Vergleich:

"STRUWWELPETER" Like "Struwwelpeter"

Wird dagegen vor den Prozeduren im allgemeinen Deklarationsteil folgender Befehl eingefügt:

Option Compare Text

dann wird nicht zwischen Groß- und Kleinschreibung unterschieden. Das bedeutet, dass im obigen Beispiel „True“ das Ergebnis ist. Explizit unterschieden wird zwischen Groß-und Kleinbuchstaben, wenn sich vor der ersten Prozedur folgender Befehl befindet:

Option Compare Binary

4.2 Verzweigungen I

Die bekannteste (und vielleicht am häufigsten gebrauchte) Wenn-Verzeigung kann einzeilig:

If Bedingung Then [Anweisungen] [Else elseAnweisungen]

oder im Block auf mehrere Zeilen geschrieben werden:

If Bedingung Then

[Anweisungen]

[ElseIf Bedingung-n Then

[elseifAnweisungen] ...

[Else]

[elseAnweisungen]

End If

4.3 Verzweigungen II

Für sehr viele Fälle eignet sich die übersichtliche Select Case-Schleife:

Select Case Testausdruck

[Case Ausdrucksliste-n

[Anweisungen-n]] ...

[Case Else]

[elseAnw]]

End Select

Dabei ist zu beachten, dass Vergleichsoperatoren nur mit einem IS-Statement verwendet werden können, beispielsweise:

Select Case Variable

Case Is > 1

Verschiedene Argumente können durch Kommata getrennt hintereinander geschrieben werden:

Case 2, 3, 4

Bereiche können mit To zusammengefasst werden:

Case 2 To 4

4.4 Verzweigungen III

Eine (sehr selten verwendete) Verzweigung hat die folgende Syntax:

IIf(expr, truepart, falsepart)

Während die If-Verzweigung, wie in Kapitel 4.2 beschrieben, Anweisungen verarbeiten kann, liefert IIf als Funktion einen Wert. Beispielsweise so:

"Jänner", "Januar")

Beachten Sie, dass IIf eine Funktion ist, das heißt: es wird ein Wert zurückgegeben. Man kann sie nicht für Anweisungen, also beispielsweise für Meldungsfenster verwenden.

4.5 Verzweigungen IV

Während IIf sich nur zwischen einer von zwei Auswahlmöglichkeiten entscheiden kann, so kann die Funktion Choose aus einer Reihe von Argumenten auswählen. Die Syntax lautet:

Choose(Index, Auswahl-1[, Auswahl-2, ... [, Auswahl-n]])

Im folgenden Beispiel wählt die Funktion Auswahl zwischen vier Werten aus, die ihr übergeben wurden:

Function Auswahl(i As Integer) As String

End Function

Beachten Sie, dass Choose, ebenso wie IIf, eine Funktion ist, das heißt: es wird ein Wert zurückgegeben. Man kann sie nicht für Anweisungen, also beispielsweise für Meldungsfenster verwenden.

4.6 Informationsabfragen

In der folgenden Liste finden Sie sämtliche Informationen über Variablen, die abgefragt werden können:

FunktionBedeutungBeispielIsDateüberprüft, ob es sich um ein Datum handelt.IsDate(28.2.2001) liefert „True“. IsDate(29.2.2001) liefert „False“.IsNumericüberprüft, ob es sich um eine Zahl handelt.IsNumeric(3) liefert „True“. IsNumeric(“drei“) liefert „False“.IsNullüberprüft, ob eine Variable leer ist.IsNull() liefert „True“. IsNull(“drei“) liefert „False“.IsEmptyüberprüft, ob eine Variable initialisiert wurde. IsArrayüberprüft, ob es sich bei einer Variablen um ein Datenfeld handelt. IsMissingüberprüft, ob Argumente übergeben wurden. IsObjectüberprüft, ob es sich um ein Objekt handelt. IsErrorüberprüft, ob es sich um ein Fehlerobjekt handelt. 

Tabelle 6: Die Liste der Informationsabfragen

4.7 Übungen zu Operatoren, Verknüpfungen und Verzweigungen

Übung 1

Im rechtwinkligen Dreieck gilt für die drei Seiten:

Der Benutzer gibt die Werte von a und b ein und erhält die Länge der Hypotenusen c.

Übung 2

Lassen Sie sich in einem Meldungsfenster folgenden Text anzeigen:

Das "Gute" – dieser Satz steht fest –

Ist stets das Böse, das man lässt.

W. Busch, Die Fromme Helene

Übung 3

Schreiben Sie eine Prozedur, in der die Benutzerin oder der Benutzer nach ihrem / seinem Geschlecht („w“ oder „m“) gefragt wird. Wird der korrekte Buchstabe eingetippt, dann wird sie / er nach ihrem / seinem Namen gefragt und dieses wird ausgegeben. Beim Vertippen wird sie / er darauf hingewiesen.

Übung 4

Gesucht ist die Lösung der Gleichung

Der Benutzer gibt die Werte für a und b ein. Die Lösung der Gleichung lautet:

Sie funktioniert nur, wenn

Überprüfen Sie dies und melden Sie dann dem Benutzer, dass es keine oder eine (welche?) Lösung gibt oder dass zwei Lösungen existieren (welche?).

Übung 5

Der Benutzer gibt eine Jahreszahl ein. Es wird überprüft, ob es sich um ein Schaltjahr handelt. Diese Information wird ausgegeben.

4.8 Tipps zu den Übungen zu Operatoren, Verknüpfungen und Verzweigungen

Tipp zu Übung 2

Achten Sie auf die korrekten Anführungszeichen!

Tipp zu Übung 3

Zu dieser Lösung existieren zwei Varianten, wie der Benutzer ein großes oder ein kleines „m“ (oder „w“) eingeben kann. Die eine Variante verwendet den Konjunktor And, die zweite Variante benutzet die Funktion LCase, mit der die Schreibung in Kleinbuchstaben geändert wird. In einer dritten Variante könnte die Schreibweise mit Option Compare Text ignoriert werden.

Tipp zu Übung 5

Die Regel für die Schaltjahrbestimmung lautet: Ein Jahr ist dann Schaltjahr, wenn es durch 4 teilbar ist. Ist es durch 100 teilbar, dann ist es kein Schaltjahr. Bei 400 ist es allerdings wieder Schaltjahr. Man kann dies über Verzweigungen programmieren. Dabei stehen mehrere Varianten zur Verfügung.

4.9 Lösungen zu den Übungen zu Operatoren, Verknüpfungen und Verzweigungen

Lösung 1

Sub RechtwinklDreieck()

Dim dblSeiteA As Double

Dim dblSeiteB As Double

MsgBox "Die Länge der Hypotenuse beträgt " & _

(dblSeiteA ^ 2 + dblSeiteB ^ 2) ^ 0.5

End Sub

Lösung 2

Sub Meldung()

MsgBox "Das ""Gute"" - dieser Satz steht fest -" & vbCr & _

"Ist stets das Böse, das man lässt." & vbCr & vbCr & _

vbTab & "W. Busch, Die Fromme Helene"

End Sub

oder analog die zweite Variante:

Sub Meldung()

MsgBox "Das " & Chr(34) & "Gute" & Chr(34) & _

" - dieser Satz steht fest -" & Chr(13) & _

"Ist stets das Böse, das man lässt." & _

Chr(13) & Chr(13) & Chr(9) & "W. Busch, Die Fromme Helene"

End Sub

Sollen sich innerhalb einer Zeichenketten Anführungszeichen geschrieben werden, so kann man sie in doppelte Anführungszeichen setzen. Oder man kann das Zeichen für Gänsefüßchen (Chr(34)) verketten. Analog steht für Zeilenwechsel vbLf oder Chr(10), für [Enter] vbCr oder Chr(13). Der Tabulator wird durch vbTab oder Chr(9) ausgedrückt.

Lösung 3

Sub Begrüßung()

Dim strName As String

Dim strGeschlecht As String

vbCr & "Bitte ""m"" oder ""w"" eingeben!", "Name")

MsgBox "Hallo, liebe " & strName

MsgBox "Hallo, lieber " & strName

Else

MsgBox "Walnusshirn: Bitte ""m"" oder ""w"" eingeben!"

End If

End Sub

Lösung 4

Sub Quadratische_Gleichung()

Dim strZeile1 As String

Dim strZeile2 As String

Dim strGleichungszeile As String

Dim dbla As Double

Dim dblb As Double

Dim dblD As Double

Dim dblx1 As Double

Dim dblx2 As Double

MsgBox "Wir berechnen die Lösung der Gleichung " & _

strZeile1 & ". Bitte geben Sie die Werte für a " & _

"und für b ein!",, strZeile2

"*x + " & dblb

If dblD < 0 Then

MsgBox strGleichungszeile & " hat keine Lösung. Schade!" _

,, strZeile2

MsgBox strGleichungszeile & " hat eine Lösung: " & _ -

dbla / 2,, strZeile2

ElseIf dblD > 0 Then

MsgBox strGleichungszeile & " hat zwei Lösungen: " & _

dblx1 & " und " & dblx2,, strZeile2

End If

End Sub

Lösung 5

Sub Schaltjahr()

Dim intJahreszahl As Integer

Dim strAusgabe As String

End If

End If

End If

MsgBox intJahreszahl & strAusgabe

End Sub

Man kann in diesem Beispiel auch den umgekehrten Weg gehen:

Sub Schaltjahr2()

Dim intJahreszahl As Integer

Dim strAusgabe As String

If intJahreszahl Mod 4 <> 0 Then

Else

If intJahreszahl Mod 100 <> 0 Then

Else

If intJahreszahl Mod 400 <> 0 Then

Else

End If

End If

End If

MsgBox intJahreszahl & strAusgabe

End Sub

5 Eingebaute Funktionen

Wenn Sie eine Funktion suchen, die VBA zur Verfügung stellt, dann können Sie den Objektkatalog verwenden. Dort werden in der Bibliothek „VBA“ alle Klassen mit zugehörigen Funktionen aufgelistet.

Abbildung 1: Der Objektkatalog

Hier nun ein Überblick über die wichtigsten Funktionen:

5.1 Die mathematischen Funktionen:

Tabelle 7:Die mathematischen Funktionen

5.2 Die finanzmathematischen Funktionen:

FunktionsnameFunktionsname in ExcelBedeutungDDBGDADie Abschreibung eines Anlageobjekts nach der geometrisch degressiven Methode für einen spezifischen ZeitraumSYDDIADie Abschreibung eines Anlageobjekts nach der arithmetisch degressiven Methode für einen spezifischen ZeitraumSLNLIADie Abschreibung eines Anlageobjekts nach der linearen Methode für einen spezifischen ZeitraumFVZWDer Endwert einer Annuität ausgehend von regelmäßigen Zahlungen und einem konstanten ZinssatzRATEZINSDer Zinssatz einer AnnuitätIRRIKVDer interne Zinsfluss für regelmäßige Cash-FlowsMIRRQIKVDer modifizierte interne Zinsfluss für regelmäßige Cash-FlowsIPMTZINSZDer Zinsanteil einer Annuität für einen spezifischen ZeitraumPMTRMZDie Zahlung einer Annuität Der Kapitalanteil einer AnnuitätPPMTKAPZDer Kapitalanteil einer AnnuitätNPVNBWDer Netto-Barwert für regelmäßige Cash-FlowsPVBWDer Barwert einer Annuität

Tabelle 8:Die finanzmathematischen Funktionen

5.3 Die String-Funktionen

Tabelle 9:Die String-Funktionen

5.4 Die Uhrzeit- und Datumsfunktionen

FunktionsnameBedeutungDatesetzt das aktuelle Systemdatum ein oder stellt das Systemdatum um.Nowgibt das Systemdatum und die aktuelle Systemzeit zurück.Timergibt einen Wert vom Typ Single zurück, der die Anzahl der seit Mitternacht vergangenen Sekunden angibt. Diese Funktion wird verwendet, wenn Zeitdifferenzen berechnet werden sollen.Timesetzt die aktuelle Systemzeit ein oder stellt die Systemzeit um.DateSerialgibt die fortlaufende Datumszahl eines Datums zurück: DateSerial (Year, Month, Day).DateValuegibt das Datum eines String-Arguments zurück.TimeSerialgibt einen fortlaufenden Zeitwert für eine aus Stunden, Minuten und Sekunden bestehenden Uhrzeit zurück.TimeValuewandelt einen String in eine Uhrzeit um.DateAddaddiert oder subtrahiert ein angegebenes Intervall zu einem oder von einem Datum.

Syntax: DateAdd(Intervall, Anzahl, Datum)

Dabei wird das Intervall als String ausgegeben (vergleiche DateDiff).

DateDiffgibt die Anzahl der Zeitintervalle zurück, die zwischen zwei Datumsangaben liegen

Syntax: DateDiff(Intervall, Date1, Date2[, FirstDayofWeek] [, FirstDayofYear]

 Intervallwird als String angegeben. Es bedeuten: DTag YKalendertag WWochentag WWWoche MMonat QQuartal YYYYJahr SSekunde NMinute HStunde    Date1, Date2die beiden Datumsangaben, deren Differenz berechnet werden soll FirstDayOfWeekgibt den ersten Wochentag an. Ohne Angaben wird Sonntag als erster gesetzt, sonst: VbUseSytem0Einstellung der Applikation VbSunday1Sonntag VbMonday2Montag VbTuesday3Dienstag VbWednesday4Mittwoch VbThursday5Donnerstag VbFriday6Freitag VbSaturday7Samstag FirstWeekofYeargibt die erste Woche des Jahres an. Ohne Angabe wird die Woche verwendet, die den 1. Jan. enthält. (Wichtig zur Berechnung von Kalenderwochen!) VbUseSystem0Einstellung der Applikation VbFirstJan11Woche mit 1. Januar VbFirstFourDays2Woche mit mindestens vier  Tagen des neuen Jahres (zur Berechnung von Kalenderwochen (laut ISO 8601)) VbFirstFullWeek3erste komplette Woche im  neuen Jahr DatePartberechnet, zu welchem Teil eines angegebenen Intervalls ein Datum gehört: DatePart(Intervall, Date [, FirstDayofWeek] [, FirstDayofYear] Die Zahlen und Variablen entsprechen denen von DateDiff.Dayfiltert den Tag aus einem Datum.Monthfiltert den Monat aus einem Datum.Yearfiltert das Jahr aus einem Datum.Weekdaygibt eine Zahl zwischen 1 und 7 zurück, die dem Wochentag entspricht: Weekday(Date, [FirstDayofWeek])

Dabei entsprechen Date einem Datum und FirstDayofWeek der gleichen Variable wie bei DateDiff. Der zurückgegebene Wert ist ebenso eine Zahl von 1 bis 7 oder von vbSunday bis vbSaturday

Hourfiltert die Stunde aus einer Uhrzeit.Minutefiltert die Minutenanzahl aus einer Uhrzeit.Secondfiltert die Sekundenanzahl aus einer Uhrzeit.

Tabelle 10: Die Uhrzeit- und Datumsfunktionen

5.5 Die Funktion Format

Format(Ausdruck[,Format[,firstdayofweek[,firstweekofyear]]])

Ihre Argumente:

ZeichenBeschreibungBeispielKein Zeichenzeigt die Zahl ohne Formatierung an. 0beliebige ZifferFormat(1234, "0") liefert 1234

Format(1234, "0.00") liefert 1234,00 Format(1234.5678, "0") liefert 1235

Format(1234.5678, "0.00") liefert 1234,57

#Platzhalter für eine Ziffer, die nur angezeigt wird, wenn sich an dieser

Stelle eine Ziffer befindet, gedacht für Tausendertrennzeichen.

Format(1234, "0") liefert 1234

Format(1234, "#,##0") liefert 1.234

Format(123, "#,##0") liefert 123

. und,Der Punkt dient als Trennzeichen für Dezimalzeichen, das Komma für

Tausendertrennzeichen. Also umgekehrt als im Deutschen!

Siehe oben%multipliziert die Zahl mit 100 und fügt ein %-Zeichen an.Format(0.15, "#,##0.00%") liefert 15,00%

Format(0.125, "0.00 %") liefert 12,50 %

E- E+ e- e+wissenschaftliche ZahlenschreibweiseFormat(1250000, "0.00 E+00") liefert 1,25 E+06

Format(1250000, "0.00 E-00") liefert 1,25 E06

Format(1250000, "0.00 e+0") liefert 1,25 e+6

Format(0.125, "0.00 e-0") liefert 1,25 e-1

Format(0.000125, "0.00 E-00") liefert 1,25 E-04

+, - Leerzeichen und $können zur Darstellung direkt in die Formatierung eingefügt werden.Format(1234, "#,##0.00 $") liefert 1.234,00 $\Das nächste Zeichen wird als Zeichen und nicht als Formatierung ausgegeben. Das „\“ verschwindet in der Anzeige.Format(1234, "#,##0.00 \L\i\r\e") liefert 1.234,00 Lire

Tabelle 11: Die Funktion Format und Zahlen

Es können bis zu vier verschiedene Zahlenformate in Abschnitten ausgegeben werden. Dabei bedeuten:

ZeichenBeschreibungBeispielnur ein Abschnittalle Werte zwei AbschnitteDer erste Abschnitt bezieht sich auf positive Werte und die Null, der zweite auf negative.Format(123, "0;(0)") liefert 123drei AbschnitteWie zwei Abschnitte; der dritte Abschnitt bezieht sich auf die Null.Format(-123, "0;(0);\N\i\x") liefert (123)vier AbschnitteWie drei Abschnitte; der vierte Abschnitt bezieht sich auf Null-Werte.Format(0, "0;(0);\N\i\x") liefert Nix

Tabelle 12: Die Funktion Format und Zahlen und Abschnitte

Datumsformatierungen:

Tabelle 13: Die Funktion Format und Datumsformatierungen

Die Zeitangaben:

ZeichenBeschreibungBeispiel:Zeittrennzeichen hStunde als Zahl ohne führende NullFormat("2:4", "h:m") liefert 2:4hhStunde als Zahl mit führender NullFormat("2:4", "hh:mm") liefert 02:04n oder mdie Minute ohne führende NullFormat("15:4", "hh:mm") liefert 15:04nn oder mmdie Minute mit führender Null sdie Sekunden ohne führende Null ssdie Sekunden mit führender Null tttttdie vollständige ZeitangabeFormat("2:4", "ttttt") liefert 02:04:00AM/PM, am/pm, A/P, A/p, AMPMverschiedene 12-Stunden-Formate 

Tabelle 14: Die Funktion Format und Zeitformatierungen

Zeichenformatierungen:

ZeichenBeschreibungBeispiel@Platzhalter für ein Zeichen. Ist die Variable leer, wird ein Leerzeichen ausgegeben.Format("Sonnenschein", "@") liefert "Sonnenschein"&Platzhalter für ein Zeichen. Ist die Variable leer, wird ein Nichts ausgegeben.Format("Sonnenschein", "&") liefert "Sonnenschein"!Auffüllen aller Platzhalter von links nach rechts.Format("Sonnenschein", "!") liefert "Sonnenschein"<zeigt den Text in Kleinbuchstaben.Format("Sonnenschein", "<") liefert "sonnenschein">zeigt den Text in Großbuchstaben.Format("Sonnenschein", ">") liefert "SONNENSCHEIN"

Tabelle 15: Die Funktion Format und Zeichenformatierungen

5.6 Umwandlungsfunktionen

FunktionRückgabetypBereich des Arguments AusdruckCboolBooleanEine gültige Zeichenfolge oder ein gültiger numerischer AusdruckCbyteByte0 bis 255CcurCurrency-922.337.203.685.477,5808 bis 922.337.203.685.477,5807.CdateDateEin beliebiger gültiger Datumsausdruck.CDblDouble-1,79769313486231E308 bis -4,94065645841247E-324 für negative Werte; 4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte.CDecDecimal+/-79.228.162.514.264.337.593.543.950.335 für skalierte Ganzzahlen, d.h. Zahlen ohne Dezimalstellen. Für Zahlen mit 28 Dezimalstellen gilt der Bereich +/- 7,9228162514264337593543950335. Die kleinste mögliche Zahl ungleich Null ist 0,0000000000000000000000000001.CIntInteger-32.768 bis 32.767; Nachkommastellen werden gerundet.CLngLong-2.147.483.648 bis 2.147.483.647; Nachkommastellen werden gerundet.CSngSingle-3,402823E38 bis -1,401298E-45 für negative Werte; 1,401298E-45 bis 3,402823E38 für positive Werte.CvarVariantNumerische Werte im Bereich des Typs Double. Nichtnumerische Werte im Bereich des Typs String.CStrStringRückgabe für CStr hängt vom Argument Ausdruck ab.

Tabelle 16: Umwandlungsfunktionen

5.7 Übungen zu den mathematischen Funktionen

Übung 1

Berechnen Sie Ostersonntag! Die Lösung dieses Problems stammt vom Mathematiker, Astronom und Physiker Carl Friedrich Gauß, und sieht wie folgt aus: Die Jahreszahl sei J und J - 1900 sei a. Der Rest von a/19 wird schlicht b genannt. Jetzt wird vom Ausdruck (7*b+1)/19 der ganzzahlige Quotient genommen, der c genannt wird. Mit d wird der Rest von (11*b+4-c)/29 bezeichnet und der Quotient von a/4 mit e. Dann bleibt noch der Rest von (a+e+31-d)/7. Und dieser soll f genannt werden. Daraus folgt, dass für das Osterdatum April die Formel 25 - d - f gilt.

Soll beispielsweise von 2016 der Ostersonntag berechnet werden, so ergeben sich folgende Werte:

Analog für das Jahr 2017:

Übung 2

Die Funktion Round rundet nur Stellen nach dem Dezimalzeichen. Lassen Sie mit ihrer Hilfe vor dem Komma runden, also beispielsweise 1.234.567 ergibt auf 2 Stellen vor dem Komma 1.234.600 und auf 6 Stellen: 1.000.000.

5.8 Übungen zu den Textfunktionen

Übung 3

Schreiben Sie eine Prozedur, die einen Namen mit Vornamen und Zunamen in Vor- und Zunamen zerlegt.

Übung 4

Schreiben Sie eine Prozedur, die aus einem Dateipfad den Dateinamen (ohne Endung) herausliest.

Übung 5

Schreiben Sie eine Prozedur, die überprüft, ob von einem eingegebenen Text das erste Zeichen eine Ziffer ist.

Übung 6

Der Benutzer oder die Benutzerin wird aufgefordert, ein „m“ oder ein „w“ für das Geschlecht einzugeben. Gibt er oder sie weder ein „w“, „W“, „m“ noch ein „M“ ein, dann wird er oder sie darauf hingewiesen.

5.9 Übungen zu den Datumsfunktionen

Übung 7

Der Benutzer gibt sein