Das Wichtigste in VBA
Datentypen
Datentyp Bedeutung
Boolean Wahrheitswert (True oder False) Byte Ganze Zahl (8 Bit) ohne Vorzeichen Integer Ganze Zahl (16 Bit)
Long Ganze Zahl (32 Bit)
Single Reelle Zahl (32 Bit, einfache Genauigkeit) Double Reelle Zahl (64 Bit, doppelte Genauigkeit) Date Datum, Uhrzeit
String Zeichenkette Range Zellbereich
Variablendefinition: Dim Variable As Datentyp Beispiel: Dim anzahl As Integer
Operatoren: Arithmetisch: +, -, *, /, ^ (Potenz), \ (Ganzzahldivision), Mod (Modulo, Rest beim Teilen) Vergleich: = (Gleichheit und Zuweisung), <, >, <=, >=, <> (Ungleichheit)
Logisch: And, Or, Not, Zeichenketten: & (Verkettung)
Definition und Aufruf von Prozeduren und Funktionen
Prozedur: Definition Funktion: Definition
Sub Prozedurname (Parameterliste) ...
...
End Sub
Function Funkname (Paramterliste) As Datentyp
...
...
Funkname = ...
End Function
• Dabei ist die Parameterliste in beiden Fällen folgendermaßen aufgebaut:
par1 As Datentyp1, par2 As Datentyp2, …
• Der bei der Funktionsdefinition angegebene Datentyp ist der Datentyp des Rückgabewerts, in der mit dem roten Pfeil gekennzeichneten Zeile zugewiesen wird.
Prozedur: Aufruf Funktion: Aufruf
Prozedurname Liste oder Call Prozedurname (Liste)
Variable = Funkname (Liste) oder
… Funkname (Liste)… (in einem Ausdruck) oder
=Funkname (Liste) (in der Zelle eines Arbeitsblatts)
• Liste ist die Liste mit den aktuellen Parametern, die beim Aufruf verwendet werden: p1, p2, …
• Prozeduren sind häufig mit Steuerelementen verbunden und haben dann keine Parameter.
Kontrollstrukturen 1: Auswahl (Selektion, Verzweigung, Fallunterscheidung)
Einseitige Verzweigung Zwei Fälle Drei (und mehr) Fälle
If Bedingung Then ...
...
End If
If Bedingung Then ...
...
Else ...
...
End If
If Bedingung1 Then ...
ElseIf Bedingung2 Then ...
... 'Ggf. mehr Fälle Else
...
End If
• Bedingung ist immer ein logischer Ausdruck, der nur True oder False sein kann.
• Durch Übersetzung der engl. Wörter If, Then, Else ist die Ausführung ist intuitiv verständlich.
• Die rechte Spalte kann durch mehrere ElseIf auch auf mehr als drei Fälle erweitert werden.
Mehrfachauswahl mit Select Case Select Case Ausdruck
Case Werteliste1
...
Case Werteliste2
...
... 'Ggf. mehr Fälle Case Else
...
End Select
• Nimmt der Ausdruck einen Wert an, der in einer der Wertelisten vorkommt, so wird die Programm- ausführung bei dem entsprechenden Case fortgesetzt.
Kommt der Wert in keiner der Listen vor, so wird der Case Else-Fall ausgeführt, der aber auch entfallen kann.
• Die Wertelisten können so aufgebaut sein (Beispiele):
5, 10, 15 Die Werte 5, 10 und 15
Is < 5, Is > 15 Alle Werte < 5 und alle Werte > 15 5 To 15 Alle Werte zw. 5 und 15 (einschließl.)
Kontrollstrukturen 2: Schleife (Iteration, Wiederholung)
Schleife mit Kopfprüfung Schleife mit Fußprüfung Do While Bedingung
...
...
Loop
Do ...
...
Loop While Bedingung
• Bedingung ist immer ein logischer Ausdruck, der nur True oder False sein kann.
• Die Schleife wird (wiederholt) durchlaufen, wenn die Bedingung True ist.
• Statt While kann auch das Schlüsselwort Until stehen. In diesem Fall wird die Schleife abgebrochen, wenn die Bedingung True ist.
• Bei der Kopfprüfung wird schon vor dem ersten Schleifendurchlauf die Bedingung getestet.
• Bei der Fußprüfung wird immer nach einem Schleifendurchlauf die Bedingung getestet.
For-Schleife For Zähler = Anfang To Ende
...
...
Next Zähler
For Zähler = Anfang To Ende Step Schritt ...
...
Next Zähler
Bei der For-Schleife wird die Variable Zähler vom Wert Anfang bis zum Wert Ende gezählt. Bei der linken Form geschieht dies mit einer Schrittweite von 1, bei der rechten Form mit der Schrittweite Schritt. Die Schrittweite wird automatisch nach jedem Schleifendurchlauf zum Zähler addiert.
Felder (Arrays)
Felder dienen zum Speichern von mehreren Werten des gleichen Datentyps in einer Variablen. Auf die einzelnen Werte (= Elemente) eines Feldes kann mit einem Index (oder bei mehrdimensionalen Feldern mehreren Indexwerten = Indizes) zugegriffen werden.
Bei normalen (statischen) Feldern muss die Größe bei der Definition angegeben werden. Bei dynamischen Feldern wird die Größe später festgelegt und kann auch geändert werden.
Beispiel Erklärung
Dim fa(1 To 10) As Integer Definition eines Feldes mit 10 Integer-Elementen bei Index 1 bis 10 Dim fb(5 To 15) As Double Definition eines Feldes mit 11 Double-Elementen bei Index 5 bis 15 Dim fc(5) As String Oberer Index = 5, als unterer Index wir automatisch 0 eingesetzt fa(7) = 123 Schreibt den Wert 123 bei Index 7 in das Feld fa
For i = 5 To 15 fb(i) = 0.1*i*i Next i
Typische Schleife, die alle Elemente des Feldes fb berechnet
LBound(fb) Untere Indexgrenze eines Feldes, hier: 5 UBound(fb) Obere Indexgrenze eines Feldes, hier: 15 Dim f2d(1 To 5, 3 To 7)
As Double
Definition eines zweidimensionalen Feldes,
1. Index im Bereich 1 bis 5, 2. Index im Bereich 3 bis 7 f2d(2, 6) = 33.77 Setzt das Element mit den Indexwerten 2 und 6 auf 33.77 LBound(f2d, 2) Untere Indexgrenze des 2. Index, hier: 3
UBound(f2d, 1) Obere Indexgrenze des 1. Index, hier: 5
Dim fd() As Integer Die Variable fd kann auf ein dynamisches Feld verweisen ReDim fd(1 To 100) Das dynamische Feld fd wird in der Größe 100 angelegt
Benutzerdefinierte Datentypen
Variablen von benutzerdefinierten Datentypen dienen, ähnlich wie Felder, zum Speichern von mehreren Werten. Anders als bei Feldern müssen die Werte aber nicht den gleichen Datentyp haben. Sie sind auch nicht über einen Index zugreifbar, sondern über einen Namen (mit vorangestelltem Punkt).
Beispiel Erklärung
Type Person
name As String gebdat As Date groesse As Single End Type
Definition des benutzerdefinierten Datentyps Person.
Dieser enthält Name, Geburtsdatum und Größe einer Person.
Solche Definitionen müssen vor allen Prozedur- und Funktionsdefinitionen stehen. Die Einzelteile eines solchen Datentyps werden als Komponenten bezeichnet.
Dim p As Person Definition einer Variablen p vom Typ Person p.name = "Dirk Nowitzki"
p.gebdat = "19.06.1978"
p.groesse = 2.13
Zuweisen von Werten an die Komponenten der Variablen p, Zugriff mit dem Punkt-Operator