You are on page 1of 30

F ACHBEREICH BAUINGENIEURWESEN

Kurzanleitung zum Arbeiten mit






VISUAL BASIC

FR APPLIKATIONEN



































Det l ef Rot he

Select Case eulerfall
Case 1
sk = 2 * laenge
Case 2
sk = laenge
Case 3
sk = laenge / Sqr(2)
Case 4
sk = 0.5 * laenge
Case Else
MsgBox "Falsche Eingabe fr Eulerfall " & eulerfall
Exit Sub
End Select


areaMin = 1E+30
iMem = 1000
sig = 1E+30
omegaMem = 0
For i = 1 To nHolz
area = breiteVH(i) * hoeheVH(i)
lambda = sk * 100 / min(breiteVH(i), hoeheVH(i)) * Sqr(12)
If lambda <= 150# Then
index1 = Int(lambda / 10) + 1
index2 = index1 + 1

VBA Programmierung mit Excel

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 2/30 V. 1.0

Inhaltsverzeichnis
1 Einleitung ....................................................................................................................................... 3
2 Sprachbeschreibung VBA............................................................................................................ 6
2.1 Anweisung ............................................................................................................................... 6
2.2 Variablen und Konstanten ....................................................................................................... 6
2.2.1 Zuweisung ......................................................................................................................................... 7
2.2.2 Kommentarzeilen............................................................................................................................... 7
2.2.3 Datentypen (Zusammenfassung)....................................................................................................... 8
2.2.4 Arithmetische Operatoren.................................................................................................................. 8
2.2.5 Verkettungsoperator &....................................................................................................................... 9
2.3 Verzweigungen........................................................................................................................ 9
2.3.1 If...Then...Else-Anweisung................................................................................................................. 9
2.3.2 Vergleichsoperatoren....................................................................................................................... 10
2.3.3 Logische Operatoren ....................................................................................................................... 10
2.3.4 Select CaseAnweisung.................................................................................................................. 11
2.4 Schleifen................................................................................................................................ 12
2.4.1 For...Next-Anweisung ...................................................................................................................... 12
2.4.2 DoLoopAnweisung..................................................................................................................... 12
2.5 Datenfelder ............................................................................................................................ 13
2.5.1 Statische Datenfelder ...................................................................................................................... 13
2.5.2 Dynamische Datenfelder ................................................................................................................. 14
2.6 Prozeduren ............................................................................................................................ 15
2.6.1 SubAnweisung............................................................................................................................... 16
2.6.2 FunctionAnweisung ....................................................................................................................... 17
2.6.3 bergabeparameter......................................................................................................................... 17
2.7 Module................................................................................................................................... 18
2.8 Benutzerdefinierter Datentyp................................................................................................. 18
2.9 Objekte .................................................................................................................................. 20
2.9.1 Einleitung......................................................................................................................................... 20
2.9.2 Erluterungsbeispiel ........................................................................................................................ 20
2.9.3 Objekt-Hierarchie in Excel ............................................................................................................... 22
2.9.4 With-Anweisung............................................................................................................................... 22
2.9.5 Range-Objekt................................................................................................................................... 23
2.9.6 WorksheetFunction-Objekt .............................................................................................................. 24
2.10 Ntzliche Funktionen............................................................................................................. 24
2.10.1 InputBox ...................................................................................................................................... 24
2.10.2 MsgBox ....................................................................................................................................... 25
3 Steuerelemente und Userform-Fenster..................................................................................... 25
3.1 Einfgen einer Schaltflche zum Starten von Prozeduren.................................................... 26
3.2 Kombinationsfeld................................................................................................................... 27
3.3 Benutzerformulare................................................................................................................. 28
4 Literatur ........................................................................................................................................ 29
5 Anhang ......................................................................................................................................... 29
5.1 Schlsselwrter ..................................................................................................................... 29
5.2 Symbole im Objektkatalog und im Code-Fenster.................................................................. 30
5.3 Abkrzungen fr Datentypen................................................................................................. 30
5.4 Shortcuts in VBA.................................................................................................................... 30

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 3/30 V. 1.0


1 Einleitung
Visual Basic fr Applikationen (VBA) ist Bestandteil aller Microsoft Office Programme sowie
vieler Applikationen anderer Hersteller wie AutoCAD von Autodesk. Mit VBA knnen Sie die
Funktionalitt von z.B. Excel erweitern und Ihren eigenen Bedrfnissen anpassen. Dadurch
knnen Sie immer wiederkehrende Vorgnge automatisieren und so Ihre Zeit fr kreativere
Arbeiten nutzen.
Visual Basic fr Applikationen ist eine Programmiersprache, die sogar objektorientierte
Programmentwicklung (OOP) ermglicht.
Diese Kurzanleitung zum Arbeiten mit VBA setzt voraus, dass Sie den Stoff von EDV
Anwendungen im Bauwesen I beherrschen, besonders das Arbeiten mit MS Excel.

Damit Sie direkt auf den VBA-Editor zugreifen knnen, sollten Sie folgende Einstellung
aktivieren: Ansicht / Symbolleisten/ Visual Basic



F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 4/30 V. 1.0


Zur Einfhrung soll eine kleine eigene Funktion geschrieben werden, die von einer Zahl das
Quadrat berechnet. Diese Funktion soll quadrat heien.
In dem folgenden Beispiel steht in der Eingabezelle B7 die Zahl 3. In der Ergebniszelle C7
soll das Quadrat von 3, also 3*3 = 9 stehen. Dazu soll die selbst geschriebene Funktion
quadrat verwendet werden.



Um die Funktion zu schreiben, klicken Sie auf das Symbol Visual Basic Editor . Es
erscheint ein neues zustzliches Fenster:




Diese Fenster enthlt drei Unterfenster:

Projekt Explorer:
Klicken Sie auf das Projekt: VBAProjekt und drcken dann die rechte Maustaste und whlen
Einfgen / Modul. Es wird ein neues Modul mit dem Namen Modul1 erzeugt. Alternativ
knnen sie auch in der Menleiste Einfgen / Modul whlen.

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 5/30 V. 1.0


Code Fenster:
In das Code Fenster schreiben Sie die drei neuen Zeilen aus dem obigen Bild. Sie knnen
sich die Arbeit etwas erleichtern, wenn Sie in der Menleiste auf Einfgen / Prozedur klicken.
Es erscheint dann folgender Dialog, den Sie wie gezeigt ausfllen:



Eigenschaftsfenster
Dieses Fenster enthlt Eigenschaften ber Funktionen des aktuellen Moduls. Diese knnen
gendert werden.

Durch Klicken auf das ganz links stehende Excel-Symbol in der Symbolleiste knnen Sie
in die Excel-Tabelle zurckkehren.

Da Sie die eigene Funktion als public (ffentlich) definiert haben, knnen Sie sie wie jede
andere Excel-Funktion mit Hilfe des Funktionsassistenten benutzen:



Damit haben Sie Ihre erste eigene Funktion geschrieben!

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 6/30 V. 1.0

2 Sprachbeschreibung VBA
2.1 Anweisung
Eine Anweisung ist eine syntaktisch vollstndige Einheit, die eine Aktion, Deklaration oder
Definition ausdrckt. Eine Anweisung belegt normalerweise eine einzelne Zeile. Mehrere
Anweisungen in einer Zeile knnen durch Doppelpunkte (:) getrennt werden. Das
Zeilenfortsetzungszeichen (_) wird verwendet, um eine Anweisung in der folgenden Zeile
fortzufhren.

Beispiele fr Anweisungen

Dim a As Integer, b As Integer Deklaration von 2 Variablen
a = 1 : b = 2 2 Anweisungen in einer Zeile
If a > b Then If-Anweisung
Text = Das Haus ist grn & _
und der Sommer ist schn
Anweisung, die ber 2 Zeilen geht

2.2 Variablen und Konstanten
Variablen dienen zum Speichern und Lesen von Daten, die im Kernspeicher des Rechners
gehalten werden. Der Wert, der unter einem Variablennamen gespeichert wird, kann beliebig
oft gendert oder gelesen werden. Der Wert von Konstanten dagegen kann nur beim
Programmstart gesetzt werden und kann danach nicht mehr gendert werden. Allerdings
kann er beliebig oft gelesen werden. Bevor eine Variable benutzt wird, sollte sie im
Deklarationsteil der Prozedur deklariert werden. Dies ist in Visual Basic fr Applikationen
nicht zwingend erforderlich, sollte aber, um zum Beispiel Tippfehler zu vermeiden, immer
gemacht werden.
Auerdem sollte, wenn auch nicht zwingend erforderlich, der Datentyp der Variablen
angegeben werden. Der Datentyp gibt an, wie der Inhalt der Speicherzelle zu interpretieren
ist. Bitte bedenken Sie, dass alle Daten im Kernspeicher als Bits (0/1) vorliegen und man an
diesen nicht erkennen kann, ob es sich z.B. um eine Ganzzahl, eine Dezimalzahl oder eine
Zeichenfolge handelt. Deshalb sollte neben dem Variablennamen auch der Datentyp
angegeben werden. VBA bietet als Besonderheit den Datentyp Variant an, der immer dann
verwendet wird, wenn kein Datentyp angegeben wird. Bei diesem Datentyp wird zur Laufzeit
aufgrund der Verwendung der Variablen eine sinnvolle Annahme ber den Datentyp
getroffen. Bezahlt wird dieser Komfort durch einen hheren Speicherbedarf (mindestens 16
Bytes) und mehr Rechenaufwand, der bei heutigen Rechnerleistungen allerdings meist
vernachlssigbar ist.
Variablennamen knnen aus bis zu 255 Zeichen des Alphabets einschlielich Umlauten und
Unterstrich bestehen. Sonderzeichen (!, @, &, $, #) und Leerzeichen sind unzulssig. Es
wird nicht zwischen Gro- und Kleinbuchstaben unterschieden. Das erste Zeichen muss ein
Buchstabe sein.

Beispiele

a1b1 Zulssig
1a Unzulssig, da erstes Zeichen eine Ziffer
Max. Moment Unzulssig, da Leerzeichen. Auerdem ist der Punkt in diesem
Zusammenhang unzulssig (siehe Objekte)
Das_Haus_ist_grn Zulssig
If Unzulssig, da if ein Schlsselwort der Sprache ist


F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 7/30 V. 1.0

Damit eine Variablendeklaration immer erzwungen wird, sollte am Anfang jedes Moduls die
Anweisung Option Explicit eingefgt werden. Sie knnen dies als Voreinstellung whlen, in
dem Sie im VBA-Men Extras/Optionen auswhlen und in dem erscheinenden Dialog die
Option Variablendeklaration erforderlich markieren.

Syntax

Dim Variablenname [As Datentyp]

Beispiele

Variable:
Dim Moment As Double
Dim titel As String
Dim i As Integer, j As Long, k As Byte, m As Integer

Konstante:
Const Pi = 3.14159265358979

Hinweis: Wenn Sie die Datentypen von Variablen vorgeben wollen, so mssen Sie es
explicit fr jede Variable in einer Dim-Anweisung machen.

2.2.1 Zuweisung
Eine Zuweisungs-Anweisung weist einen Wert oder einen Ausdruck einer Variablen oder
Konstanten zu. Zuweisungs-Anweisungen enthalten immer ein Gleichheitszeichen (=). Der
Ausdruck rechts des Gleichheitszeichens wird zuerst ausgewertet und dann der Variablen
auf der linken Seite zugewiesen. Deshalb mssen alle Variablen auf der rechten Seite des
Gleichheitszeichen Werte in vorhergehenden Zuweisungen zugewiesen bekommen haben!
Nachdem Variablen einen Wert erhalten haben, gelten sie als definiert.
Hinweis: Durch eine Deklaration mit der Dim-Anweisung erhalten Ganz- und Dezimalzahlen
standardmig den Wert 0 zugewiesen und sind damit definiert.

Beispiele

a = 1 Der Variablen a wird der Wert 1 zugewiesen
b = (1+5) / 3 Das Ergebnis des Ausdrucks (=2) wird b zugewiesen
a = b + c a erhlt die Summe aus b und c

2.2.2 Kommentarzeilen
Um die Lesbarkeit eines Programms zu verbessern, knnen Kommentare in den
Programmcode eingefgt werden, die von dem VBA-Interpreter ignoriert werden.
Kommentare dienen zur Erluterung und machen das Programm verstndlich. Ohne
Kommentare sind Programme wertlos. Dies gilt nicht nur fr andere Programmierer, die
Ihren Code lesen wollen, sondern auch fr Sie, wenn Sie Ihren eigenen Code nach lngerer
Zeit wieder verstehen wollen. Erfahrungsgem werden immer zu wenige Kommentare
eingefgt.
Kommentare zur Dokumentation knnen berall eingefgt werden und beginnen mit
Apostroph () oder Rem (=remark) und gelten fr den Rest der Zeile.

Beispiele

Rem Diese Funktion berechnet den Mittelwert von
Rem beliebig vielen Messwerten

a = a + 1 ' Erhhung von a um eins

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 8/30 V. 1.0

2.2.3 Datentypen (Zusammenfassung)
Die folgende Tabelle enthlt die von Visual Basic untersttzten Datentypen sowie deren
Speicherbedarf und Wertebereiche.

Datentyp Speicherbedarf Wertebereich
Byte 1 Byte 0 bis 255
Boolean 2 Bytes True oder False
Integer 2 Bytes -32.768 bis 32.767
Long
(lange Ganzzahl)
4 Bytes -2.147.483.648 bis 2.147.483.647
Single
(Gleitkommazahl mit
einfacher Genauigkeit)
4 Bytes -3,402823E38 bis -1,401298E-45 fr negative
Werte; 1,401298E-45 bis 3,402823E38 fr
positive Werte.
Double
(Gleitkommazahl mit
doppelter Genauigkeit)
8 Bytes -1,79769313486231E308 bis
-4,94065645841247E-324 fr negative Werte;
4,94065645841247E-324 bis
1,79769313486232E308 fr positive Werte.
Currency
(skalierte Ganzzahl)
8 Bytes -922.337.203.685.477,5808 bis
922.337.203.685.477,5807
Decimal 14 Bytes +/-79.228.162.514.264.337.593.543.950.335
ohne Dezimalzeichen;
+/-7,9228162514264337593543950335 mit 28
Nachkommastellen; die kleinste Zahl ungleich
Null ist
+/-0,0000000000000000000000000001.
Date 8 Bytes 1. Januar 100 bis 31. Dezember 9999.
Object 4 Bytes Beliebiger Verweis auf ein Objekt vom Typ
Object.
String
(variable Lnge)
10 Bytes plus
Zeichenfolgenlnge
0 bis ca. 2 Milliarden.
String
(feste Lnge)
Zeichenfolgenlnge 1 bis ca. 65.400
Variant
(mit Zahlen)
16 Bytes Numerische Werte im Bereich des Datentyps
Double.
Variant
(mit Zeichen)
22 Bytes plus
Zeichenfolgenlnge
Wie bei String mit variabler Lnge.
Benutzerdefiniert
(mit Type)
Zahl ist von Elementen
abhngig
Der Bereich fr jedes Element entspricht dem
Bereich des zugehrigen Datentyps.

2.2.4 Arithmetische Operatoren
Zum Rechnen mit Ganz- und Dezimalzahlen stehen folgende Operatoren zur Verfgung:

Operator Beschreibung Beispiel
^ Potenzierung 7 ^ 3 (= 343)
* Multiplikation 3 * 5 (= 15)
/ Division 0.45 / 0.9 (= 0.5)
\ ganzzahlige Division 7 \ 5 (= 1)
Mod Modulo (Rest einer ganzzahligen Division) 14 Mod 5 (= 4)
+ Addition 3 + 4 (= 7)
- Subtraktion 3 4 (= -1)




F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 9/30 V. 1.0

Wie in der Mathematik blich, gilt:
Klammern haben hchste Prioritt
Potenzierung geht vor Punktrechnung
Punktrechnung geht vor Strichrechnung
2.2.5 Verkettungsoperator &
Zeichenfolgen werden mit dem &-Operator verknpft.

Syntax

Ergebnis = Ausdruck1 & Ausdruck2 [& Ausdruckn]

Beispiel

Dim text As String
text = "Hello" & " world" ' text erhlt die Zeichenfolge "Hello world"

Alternativ:

Dim text As String, text1 As String, text2 As String
text1 = "Hello"
text2 = " world"
text = text1 & text2 ' text erhlt die Zeichenfolge "Hello world"

Es knnen auch Zahlen direkt als Ausdruck verwendet werden. VBA fhrt in diesem Fall eine
automatische Typumwandlung in eine Zeichenfolge durch.

Dim text As String
Dim i As Integer

i = 40
text = "i = " & i ' text enthlt die Zeichenfolge "i = 40"

2.3 Verzweigungen
2.3.1 If...Then...Else-Anweisung
Die If...Then...ElseIf...Else-Anweisung ermglicht aufgrund von Bedingungen zu verzweigen
und damit nur ausgewhlte Anweisungen auszufhren. Die Bedingung ist ein logischer
Ausdruck, der wahr oder falsch ergeben kann.

Syntax

Einfache Bedingung :

If Bedingung Then [Anweisungen]

Wenn sonst Bedingung

If Bedingung Then
[Anweisungen]
[Else
[elseAnweisungen]
End If



F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 10/30 V. 1.0

Bei mehreren Bedingungen knnen Sie die Block-Syntax verwenden:

If Bedingung1 Then
[Anweisungen]
[ElseIf Bedingung2 Then
[elseifAnweisungen] ...
...
[ElseIf Bedingung-n Then
[elseifAnweisungen] ...
[Else
[elseAnweisungen]]
End If

Bemerkungen
Die einzeilige Variante (erste Syntax) bietet sich bei einfachen, kurzen Tests an. Um die
Lesbarkeit zu verbessern, sollten die Anweisungen wie in den unten gezeigten Beispielen
um 2 oder 3 Leerzeichen eingerckt werden.

Beispiele:

a= ... : b = 6
If a < 0 Then b=b+1

B =
A = ...
If A = 0 Then
C=1
D=3
Else
B = B+3
End If


i =
If i < 0 Then
MsgBox i < 0
ElseIf i = 0 Then
MsgBox i = 0
Else
MsgBox i> 0
End If


2.3.2 Vergleichsoperatoren

Operator True, wenn False, wenn
< (Kleiner als) Ausdruck1 < Ausdruck2 Ausdruck1 >= Ausdruck2
<= (Kleiner oder gleich) Ausdruck1 <= Ausdruck2 Ausdruck1 > Ausdruck2
> (Grer als) Ausdruck1 > Ausdruck2 Ausdruck1 <= Ausdruck2
>= (Grer oder gleich) Ausdruck1 >= Ausdruck2 Ausdruck1 < Ausdruck2
= (Gleich) Ausdruck1 = Ausdruck2 Ausdruck1 <> Ausdruck2
<> (Ungleich) Ausdruck1 <> Ausdruck2 Ausdruck1 = Ausdruck2

2.3.3 Logische Operatoren
Mit logischen Operatoren werden zwei logische Ausdrcke verknpft.

Operator Beschreibung Beispiel
And Logisches UND Dim b As Boolean
b = 1<5 AND 7>6 (=true)
Or Logisches ODER b = 1<5 OR 6>7 (=true)
Not Logische Negation b = true
b = NOT b (=false)

Wenn Ausdrcke Operatoren aus mehreren Kategorien enthalten, werden zunchst die
arithmetischen Operatoren, dann die Vergleichsoperatoren und zuletzt die logischen
Operatoren ausgewertet. Die Vergleichsoperatoren haben alle dieselbe Prioritt und werden
daher von links nach rechts in der Reihenfolge ihres Auftretens ausgewertet.

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 11/30 V. 1.0

2.3.4 Select CaseAnweisung
Verwenden Sie die Select Case-Anweisung als Alternative zu ElseIf in If...Then...Else-
Anweisungen, wenn Sie einen Ausdruck mit mehreren unterschiedlichen Werten
vergleichen.

Syntax

Select Case Testausdruck
[Case Ausdrucksliste-n
[Anweisungen-n]] ...
[Case Else
[elseAnw]]
End Select

Bemerkungen

Wenn Testausdruck mit irgendeinem der Case-Ausdrcke in der Ausdrucksliste
bereinstimmt, werden die Anweisungen dieses Case-Abschnitts bis zum nchsten Case-
Abschnitt ausgefhrt. Anschlieend setzt das Programm die Ausfhrung mit der Anweisung
im Anschlu an End Select fort. Wenn der Testausdruck mit Ausdruckslisten in mehreren
Case-Abschnitten bereinstimmt, werden nur die Anweisungen der ersten bereinstimmung
ausgefhrt.

Die elseAnw-Anweisungen im Case Else-Abschnitt werden ausgefhrt, wenn keine
bereinstimmung zwischen Testausdruck und einer Ausdrucksliste in einer der anderen
Case-Abschnitte gefunden wird. Die Case Else-Anweisung ist optional, sollte aber in keinem
Select Case-Block fehlen, damit unvorhergesehene Werte von Testausdruck verarbeitet
werden knnen. Wenn keine Case Else-Anweisung angeben ist und keine Case-
Ausdrucksliste mit Testausdruck bereinstimmt, setzt das Programm die Ausfhrung mit der
Anweisung im Anschlu an End Select fort.
Sie knnen in jedem Case-Abschnitt mehrere Ausdrcke oder Bereiche verwenden, wie zum
Beispiel in der folgenden Zeile:

Case 1 To 4, 7, 9, Is > 12

Der Fall Is > 12 wird dann ausgefhrt, wenn der Ausdruck einen Wert grer 12 ergibt. Is ist
hier ein Schlsselwort.

Beispiel:

Select Case eulerfall
Case 1
sk = 2 * laenge
Case 2
sk = laenge
Case 3
sk = laenge / Sqr(2)
Case 4
sk = 0.5 * laenge
Case Else
MsgBox "Falsche Eingabe fr Eulerfall " & eulerfall
Exit Sub
End Select

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 12/30 V. 1.0

2.4 Schleifen
2.4.1 For...Next-Anweisung
Die For Next-Schleife wird verwendet, wenn Anweisungen eine festgelegte Anzahl von
Malen wiederholt werden sollen. Hierzu wird zu Beginn eine Laufvariable initialisiert und
solange nach jedem Durchgang mit einer Schrittweite erhht bzw. erniedrigt bis ein Endwert
erreicht wird.

Syntax

For Zhler = Anfang To Ende [Step Schrittweite]
[Anweisungen]
[Exit For]
[Anweisungen]
Next [Zhler]

Bemerkungen
Innerhalb einer Schleife kann eine beliebige Anzahl von Exit For-Anweisungen an beliebiger
Stelle als alternative Mglichkeit zum Verlassen der Schleife verwendet werden. Sie
bertrgt die Steuerung an die unmittelbar auf Next folgende Anweisung. Um die Lesbarkeit
zu verbessern, sollten die Anweisungen wie in dem unten gezeigten Beispiel um 2 oder 3
Leerzeichen eingerckt werden.

Beispiel:

Dim i As Integer

For i = 1 To 5 Step 2 i erhlt die Werte 1, 3 und 5
MsgBox "i = " & i
Next i

2.4.2 DoLoopAnweisung
Die While-Schleife wird, solange die Bedingung erfllt ist, wiederholt. Dagegen wir die Until-
Schleife solange wiederholt, bis die Bedingung erfllt ist. Beide Schleifenarten werden
bevorzugt verwendet, wenn die Anzahl der Schleifendurchlufe zu Anfang der Schleife noch
nicht bekannt ist. Dies tritt zum Beispiel bei Iterationen auf. Die Anweisungen der nicht-
abweisenden Schleife werden mindestens einmal ausgefhrt, da die berprfung erst am
Ende der Schleife stattfindet.

Syntax

Abweisende Schleife Nicht-Abweisende Schleife

Do [{While | Until} Bedingung]
[Anweisungen]
[Exit Do]
[Anweisungen]
Loop

Do
[Anweisungen]
[Exit Do]
[Anweisungen]
Loop [{While | Until} Bedingung]



F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 13/30 V. 1.0

Beispiele:

Dim i As Integer

i = InputBox("i=")

Do While i > 0
i = i - 1
MsgBox "i= " & i
Loop
Dim i As Integer

i = 1

Do
i = i + 1

Loop Until i > 10
Dim i As Integer, j As Integer
Dim abbruch As Boolean

j = 5
i = 1
abbruch = False

Do
i = i + 1
If i = j Then abbruch = True

Loop Until abbruch


2.5 Datenfelder
2.5.1 Statische Datenfelder
Ein Datenfeld (Array) besteht aus mehreren Variablen, die den selben Datentyp besitzen und
unter dem gleichen Namen angesprochen werden. Arrays eignen sich besonders zum
Speichern von Vektoren, Matrizen, Listen und Tabellen. Der Zugriff auf die einzelnen
Elemente (Zellen) erfolgt ber Indizes. Es wird zwischen ein- und mehrdimensionalen Arrays
unterschieden. Listen und Vektoren sind eindimensionale Arrays, die nur einen Index
bentigen. Fr Matrizen und Tabellen (zweidimensionale Arrays) werden 2 Indizes bentigt.
Der erste Index gibt die Zeilennummer, der zweite die Spaltennummer an.
VBA untersttzt bis zu 60 Dimensionen, allerdings sind bereits 4-dimensionale Arrays
unbersichtlich und glcklicherweise selten erforderlich.
Standardmig hat in VBA das erste Element in einem Array den Index 0. Man kann aber
durch die Anweisung Option Base 1 zu Beginn eines Moduls die Indizierung mit 1 beginnen
lassen, was im Normalfall praktischer ist, da mathematische Formeln gewhnlich mit dem
Index 1 beginnen.
Die folgende Zusammenstellung zeigt die Elementindizierung bei Vektoren mit 4 Elementen
und Matrizen mit 4 Zeilen und 4 Spalten in Abhngigkeit von der Startindizierung.



Vektoren Matrizen
Base 0 Base 1 Base 0 Base 1

3
2
1
0


4
3
2
1


3 , 3 2 , 3 1 , 3 0 , 3
3 , 2 2 , 2 1 , 2 0 , 2
3 , 1 2 , 1 1 , 1 0 , 1
3 , 0 2 , 0 1 , 0 0 , 0

4 , 4 3 , 4 2 , 4 1 , 4
4 , 3 3 , 3 2 , 3 1 , 3
4 , 2 3 , 2 2 , 2 1 , 2
4 , 1 3 , 1 2 , 1 1 , 1


Dim vec(3) As Double
Option Base 1
Dim vec(4) As Double

Dim mat(3, 3) As Double
Option Base 1
Dim mat(4, 4) As Double


In VBA wird bei der Dimensionierung von Datenfeldern der grte Index eines Elementes
angegeben, nicht die Anzahl der Zeilen oder Spalten! Zur Vereinfachung bei speziellen
Anwendungsfllen knnen auch der erste und letzte Index angegeben werden.


Elementindex

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 14/30 V. 1.0

Beispiele

Deklaration

Dim Kraft(3) As Double
Dim Liste(-1 To 5) As Variant
Dim Tabelle(4,5) As Integer
Dim Spezial(-2 To 5, 4 To 6 )


(7 Elemente)

(Matrix mit 8 Zeilen und 6 Spalten = 48 Elementen)


Wertzuweisung

Kraft(2) = 1.5 * Kraft(1)
A = Liste(-1)
Tabelle(4,5) = 2
Spezial(-2,4) = Hallo

Besonders effektiv ist die Verwendung von Arrays in Verbindung mit Schleifen und
ganzzahligen Variablen zur Indizierung:

Const n = 10
Dim i As Integer
Dim dfeld(0 To n) As Long

dfeld(0) = 2
For i = 1 To n
dfeld(i) = dfeld(i - 1) * 3
Next i

2.5.2 Dynamische Datenfelder
Im Gegensatz zu statischen Arrays kann die Anzahl der Elemente eines dynamischen Arrays
whrend der Laufzeit des Programms gendert werden. Dies ist hufig erforderlich, wenn zu
Beginn des Programmlaufs die Lnge von Eingabedatenstzen noch nicht bekannt ist. Es
wird auch hier im Deklarationsteil der Prozedur das Datenfeld deklariert, aber nicht die
Gre angegeben:

Dim Arrayname() As Datentyp

Zu einem spteren Zeitpunkt, nachdem die Gre des Arrays bekannt ist, wird die
Dimensionierung durchgefhrt:

Vektor:

ReDim [Preserve] Arrayname([MinIndex To] MaxIndex)

Matrix:

ReDim [Preserve] Arrayname([MinIndex1 To] MaxIndex1,[MinIndex2 To] MaxIndex2)

Diese Neudimensionierung kann mehrmals wiederholt werden. Allerdings gehen dabei die
alten Werte der Elemente verloren, wenn nicht das Schlsselwort Preserve verwendet wird.
Bei einer wiederholten Neudimensionierung mit Preserve kann nur MaxIndex in der letzten
Spalte verndert werden. Untere und obere Indexgrenzen und mehrdimensionale
Datenfelder werden analog den statischen Datenfeldern behandelt.
Mit der Erase-Anweisung knnen nicht mehr bentigte Arrays gelscht werden. Der belegte
Speicherplatz im RAM (Kernspeicher) wird freigegeben.

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 15/30 V. 1.0

Beispiel

Option Base 1
..
Dim i As Integer, n As Integer
Dim dfeld() As Long

n = InputBox("max. Elementindex = ")
ReDim dfeld(n)

For i = 1 To n
dfeld(i) = i * 3
Next i

n = InputBox("neuer max. Elementindex = ")
ReDim dfeld(n)

For i = 1 To n
dfeld(i) = i * 2
Next i
...
Erase dfeld() Datenfeld wird gelscht und Speicher freigegeben

2.6 Prozeduren
Eines der Grundkonzepte aller Programmiersprachen ist die Mglichkeit, ein Programm in
mehrere Unterprogramme (Prozeduren) aufzuteilen. Diese Unterprogramme haben je nach
Programmiersprache unterschiedliche Namen wie subroutine, function und procedure. In
Visual Basic fr Applikationen gibt es so genannte sub-Prozeduren und Function-
Prozeduren.
Diese Prozeduren ermglichen das Zusammenfassen von Programmanweisungen, die in
einem logischen und abgeschlossenen Zusammenhang stehen und ber eine definierte
Schnittstelle (Argumentliste) mit dem aufrufenden Programmteil kommunizieren. Die
Erfahrung hat gezeigt, dass kleinere Unterprogramme leichter zu pflegen und testen sind als
groe Monsterprogramme. Deshalb sollten Sie bei der Programmplanung immer berlegen,
wie Sie das Projekt in kleine abgeschlossene Prozeduren aufteilen knnen.
Der wesentliche Unterschied zwischen den beiden Prozeduren in VBA besteht darin, dass
die Function-Prozedur nur einen Wert an den aufrufenden Programmteil oder die Excel-
Tabellenzelle zurckgeben kann. Die sub-Prozedur ist die allgemeine Form und ermglicht
zum Beispiel das Schreiben in beliebig viele Zellen in einem Tabellenblatt. Sub-Prozeduren
werden mit der call-Anweisung aufgerufen.

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 16/30 V. 1.0


2.6.1 SubAnweisung

Syntax
[Private | Public] [Static] Sub NameDerProzedur [(ArgumentListe)]
[Anweisungen]
[Exit Sub]
[Anweisungen]
End Sub

Hinweise

Mit den optionalen Modifizierern Private, Public und Static werden Eigenschaften der sub-
Prozedur bestimmt.

Teil Beschreibung
Public Auf die Sub-Prozedur kann von allen anderen Prozeduren in allen Modulen
zugegriffen werden.
Privat Auf die Sub-Prozedur kann nur durch andere Prozeduren aus dem Modul
zugegriffen werden, in dem sie deklariert wurde.
Static Die lokalen Variablen der Sub-Prozedur bleiben zwischen Aufrufen erhalten.
Das Attribut Static wirkt sich nicht auf Variablen aus, die auerhalb der Sub-
Prozedur deklariert wurden, auch wenn sie in der Prozedur verwendet werden.

Mit Hilfe der Exit Sub-Anweisung kann die Prozedur vorzeitig verlassen werden.

Beispiel

Definition der sub-Prozedur writeToActiveWorksheet():

Public Sub writeToActiveWorksheet(row As Long, col As Long, wert As Variant)

If wert = "" Then Exit Sub ' Wenn Variable wert leer ist,
dann braucht nix gemacht zu werden
Cells(row, col).value = wert

End Sub

Aufruf der sub-Prozedur writeToActiveWorksheet():

Dim str
...
str = "Guten Tag"
Call writeToActiveWorksheet(2, 1, str)

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 17/30 V. 1.0


2.6.2 FunctionAnweisung
Von einer Funktion wird an den aufrufenden Programmteil ber den Namen der Funktion
genau ein Wert zurckgeliefert.

Syntax

[Public | Private] [Static] Function NameDerFunktion [(ArgumentListe)] [As Typ]
[Anweisungen]
[NameDerFunktion = Ausdruck]
[Exit Function]
[Anweisungen]
[NameDerFunktion = Ausdruck]
End Function

Hinweis
Die optionalen Modifizierer Private, Public und Static sind in der sub-Prozedur beschrieben.

Beispiel

Definition der Funktion min():

Public Function min(a As Long, b As Long) As Long

Funktion min liefert den kleineren Wert der zwei Argumente a und b als Ergebnis zurck

If (a <= b) Then
min = a
Else
min = b
End If
End Function

Anwendung der Funktion min():

...Dim c As Long, d As Long, e As Long
...
c = 2 : d = 3
e = min( c, d )
...

2.6.3 bergabeparameter
Einer Prozedur knnen in der bergabeliste (Argumentliste) einzelne Variablen, Datenfelder
und Objekte bergeben werden. Werden mehrere Parameter bergeben, so werden diese
durch Kommata getrennt. Der Datentyp sollte in der Parameterliste mit angegeben werden.
Die Wertbergabe wurde eingefhrt, da bei der traditionellen Referenzbergabe immer
wieder unangenehme Fehler (Seiteneffekte) in anderen Programmteilen auftraten, wenn
versehentlich Werte von bergabevariablen in Prozeduren gendert wurden, die eigentlich
nach der ursprnglichen Planung nicht gendert werden sollten. Verwenden Sie also die
Wertbergabe, wenn ein bergabeparameter von der Prozedur nicht gendert werden darf.

Referenzbergabe
Standardmig werden in VBA Referenzen auf die Variablen in der Parameterliste
bergeben. Referenz bedeutet, dass die Adresse der Variablen im Speicher bergeben wird.
Dies hat zur Folge, dass eine Wertnderung einer bergabevariablen in der Prozedur auch

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 18/30 V. 1.0

im aufrufenden Programm erhalten bleibt. Prozedur und aufrufendes Programm rechnen
also mit der gleichen Speicherstelle im Kernspeicher!
Mit dem Schlsselwert ByRef (=by reference) vor dem Variablennamen wird eine
Referenzbergabe erzwungen.

Wertbergabe
Bei der Wertbergabe wird ein Kopie der bergabevariablen an die Prozedur bergeben.
Diese Kopie liegt in einem neuen Speicherbereich (Stack) und enthlt bei der bergabe den
Wert der Originalvariablen. nderungen des Wertes innerhalb der Prozedur gehen beim
Verlassen verloren, d.h. im aufrufenden Programm bleibt der ursprngliche Wert der
Variablen erhalten.
Mit dem Schlsselwert ByVal (=by value) vor dem Variablennamen wird eine Wertbergabe
erzwungen.

Beispiel

Private sub bsp( ByVal alpha As Double, ByRef ergebnis As Double )
Umrechnung ins Bogenma, aufrufendes Programm erfhrt davon nichts
alpha = alpha * 3.1416 / 180
Variable ergebnis erhlt neuen Wert, der auch im aufrufendes Programm erhalten bleibt
ergebnis = alpha
End Sub

2.7 Module
Prozeduren, die in einem logischen Zusammenhang stehen, knnen in einem Modul
zusammengefasst werden. Dadurch kann ein Programm besser strukturiert und leichter
gepflegt werden. Auerdem kann durch die Modifizierer Public und Private der Zugriff auf
Prozeduren gesteuert werden. Wenn eine Prozedur als Private deklariert wird, knnen nur
Prozeduren des Moduls diese verwenden. Sinnvoll ist dies zum Beispiel fr Hilfsfunktionen,
deren Verwendung auerhalb des Moduls zu Fehlern fhren kann.
Weiterhin knnen in einem Modul globale Variablen definiert werden, die nur in diesem
Modul verwendet werden knnen. Man spart sich dadurch hufig den umstndlichen
Datentransfer von einer Prozedur zur nchsten ber Parameterlisten. Globale Variablen
werden auerhalb von Prozeduren definiert, normalerweise am Anfang eines Moduls.
Das Modul-Konzept ermglicht eine einfache Art der Kapselung (OOP-Konzept), wenn
Moduln in mehreren Projekten genutzt werden sollen.
Sie knnen neue Moduln in ein VBA-Projekt einfgen, in dem Sie in der VBA-Menleiste auf
Einfgen/Modul klicken.

2.8 Benutzerdefinierter Datentyp
Mit der Type-Anweisung knnen Sie einen eigenen Datentyp definieren, der aus
Einzelvariablen und Datenfeldern mit Standarddatentypen besteht. Typischerweise
verwendet man benutzerdefinierte Datentypen, wenn mehrere Variablen in einem logischen
Zusammenhang stehen und unter einem gemeinsamen Gruppen-Namen angesprochen
werden sollen. Dadurch kann die Lesbarkeit des Programms verbessert und die Fehlerrate
durch falsche Verwendung von Variablen verringert werden. Das im folgenden angegebene
Beispiel definiert zwei benutzerdefinierte Datentypen Kunde und Lieferant. Beide Typen
haben Elemente gleichen Namens, die aber unterschiedliche Speicherstellen darstellen.
Nachdem ein neuer Datentyp definiert ist, kann er wie jeder Standarddatentyp in einer Dim-
Anweisung verwendet werden. Die Type-Anweisung beschreibt nur einen neuen Datentyp,
reserviert aber keinen Speicherplatz im Kernspeicher des Rechners. Erst die Dim-Anweisung
im Deklarationsteil des Programms tut dies. Die im Deklarationsteil verwendeten
Variablennamen mssen sich vom gewhlten Typnamen unterscheiden. In Anweisungen
und Zuweisungen werden die Variablennamen von den Elementnamen durch einen Punkt

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 19/30 V. 1.0

getrennt. Ein benutzerdefinierter Datentyp kann andere benutzerdefinierte Datentypen in
seiner Elementliste enthalten.

Syntax

[Private | Public] Type VarName
Elementname [([Indizes])] As Typ
[Elementname [([Indizes])] As Typ]
. . .
End Type

Beispiel

Option Base 1
Benutzerdefinierte Datentypen definieren
Type Kunde
Vorname As String
Nachname As String
Wohnort As String
PLZ As Long
TelNr As String
End Type

Type Lieferant
Vorname As String
Nachname As String
Wohnort As String
PLZ As Long
TelNr As String
End Type


Public Sub Beispiel()
Deklarationsteil
Dim i As Long
Dim kunde1 As Kunde
Dim kd(10) As Kunde
Dim liefer(5) As Lieferant
dem Kunden kunde1 Eigenschaften zuweisen
kunde1.Nachname = "Mller"
kunde1.Vorname = "Xaver"
kunde1.Wohnort = "Mnchen"
kunde1.PLZ = 34221
kunde1.TelNr = "089-1234567"

in Tabellenblatt 1 ausgeben
Cells(1, 1) = kunde1.Nachname
Cells(1, 2) = kunde1.Vorname
Cells(1, 3) = kunde1.PLZ
Cells(1, 4) = kunde1.Wohnort
Cells(1, 5) = kunde1.TelNr

eine Liste von 10 Kunden mit Nachnamen belegen und ausgeben
For i = 1 To 10
kd(i).Nachname = "Mller_" & i
Cells(1 + i, 1) = kd(i).Nachname
Next i

eine Liste von 5 Lieferanten mit Nachnamen belegen
und in Tabellenblatt 2 ausgeben


F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 20/30 V. 1.0

For i = 1 To 5
liefer(i).Nachname = "Meister&Co._" & i
Tabelle2.Cells(i, 1) = liefer(i).Nachname
Next i

End Sub

2.9 Objekte
2.9.1 Einleitung
Visual Basic fr Applikationen (VBA) untersttzt das objektorientierte Programmierkonzept,
das seit Mitte der achtziger Jahre eine groe Popularitt in der Softwareentwicklung erfhrt.
Alle neuen modernen Programmiersprachen wie Java und C++ untersttzen dieses Konzept.
VBA ist allerdings keine vollstndige objektorientierte Programmiersprache (OOP), da sie
nicht alle Features untersttzt. Fr die Programmierung von Excel-Anwendungen ist der
Funktionsumfang aber vllig ausreichend.
Im vorherigen Kapitel hatten Sie den benutzerdefinierten Datentyp kennengelernt. Objekte
sind eine Fortsetzung dieses Gruppierungsgedankens von Variablen. Objekte enthalten aber
nicht nur Daten sondern auch Funktionen und Prozeduren, die im Zusammenhang mit den
Daten stehen und zum Lesen, Schreiben und Rechnen verwendet werden.
In der objektorientierten Programmierung werden viele neue Begriffe eingefhrt. So heien
Funktionen oder Prozeduren ganz allgemein Methoden. Mit dem Wort Eigenschaft wird
zum Beispiel die Farbe einer Zelle oder die Schriftart der Zeichen in einer Zelle beschrieben.
Programmtechnisch verbirgt sich hinter einer Eigenschaft meist eine Zahl. Das heit, dass
zum Beispiel die Eigenschaft rote Farbe in einer Variablen unter dem Namen Color
gespeichert wird, die bei roter Farbe den Wert 3 hat.

2.9.2 Erluterungsbeispiel
Als Objekte knnen konkrete oder abstrakte Gegenstnde aufgefasst werden. Ein Tragwerk
kann zum Beispiel als ein Objekt betrachtet werden. Ein Objekt besteht meist aus weiteren
Objekten. Ein Bauingenieur unterteilt ein Tragwerk je nach Betrachtungsweise in Decken,
Dach, Sttzen, Fundamente etc, die wieder als Objekte aufgefasst werden knnen. Aber
auch diese Elemente knnen weiter aufgeteilt werden. So besteht ein Dach aus Pfetten,
Sparren und Pfosten etc.. Jedes Objekt hat Eigenschaften. Bei einem Sparren mit
rechteckigem Querschnitt sind das zum Beispiel die Abmessungen Breite, Hhe und Lnge,
das Material und die Festigkeiten. Das Volumen kann mit einer Methode berechnet werden,
in dem die Breite mit der Hhe und der Lnge multipliziert wird. Auch die vorhandenen
Spannungen knnen mit Methoden berechnet werden. Alle diese beschriebenen Objekte
bestehen in einer Beziehung zueinander, die hierarchisch dargestellt werden kann.


F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 21/30 V. 1.0


Um die Breite des zweiten Sparrens anzusprechen, wird folgende Syntax vereinbart. Der
Punkt wird als Trennzeichen vereinbart.

Tragwerk.Dach.Sparren(2).Breite

Es wre mig, fr jedes Tragwerk eine neue Hierarchie zu entwickeln, da fast jedes
Gebude ein Dach, Sttzen und Decken hat. Effektiver ist es, wenn man eine allgemeine
Beschreibung festlegt, die fr viele Tragwerke benutzt werden kann. Diese Beschreibung
erfolgt mit Hilfe von Klassen. Zum Beispiel werden die Decken zu einer Klasse
zusammengefasst. Dabei kann unterschieden werden zwischen Deckenarten, Aufbau,
Materialen und Abmessungen etc. Die Klasse der Decken kann wiederum aufgeteilt werden
in Klassen fr Stahlbeton- und Holzdecken mit eigenen speziellen Eigenschaften.
Ein konkretes Tragwerks-Objekt wird dann ber die Klasse erzeugt. Das Objekt hat dann alle
Eigenschaften und Methoden, die in der Klasse beschrieben wurden. Die Objekte werden
auch als Instanz ihrer Klasse bezeichnet.
Um die Breite des zweiten Sparrens eines realen Gebudes mit Namen A12 anzusprechen,
wrde man jetzt schreiben:

A12.Dach.Sparren(2).Breite

Und sollte es auch ein weiteres Tragwerk A11 mit mindestens 2 Sparren geben:

A11.Dach.Sparren(2).Breite

Die Breiten der Sparren in den beiden Tragwerken knnen natrlich unterschiedlich sein, da
die Eigenschaften (Daten) eigene Speicherpltze verwenden.
Jedes Objekt gehrt einer Klasse an. Klassen werden in einer hierarchischen Beziehung
aufgebaut. Unterklassen knnen Eigenschaften und Methoden von bergeordneten Klassen
bernehmen. Man bezeichnet dies als Vererbung. Zum Beispiel kann man der Klasse
Decken die Eigenschaft Dicke zuordnen, da jede Decke eine Deckendicke hat. Diese
Eigenschaft knnen alle abgeleiteten Deckenarten bernehmen, so dass diese keine eigene
Eigenschaft Deckendicke bentigen. Man kann dadurch die Gre von Unterklassen
reduzieren und Fehler vermeiden.

Tragwerk
Decken
Decke KG Decke EG
Sttzen Dach
Sparren Pfetten Pfosten
Breite
Hhe
Lnge
Material
Festigkeit
1.Ebene
2.Ebene
3.Ebene
Eigenschaften

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 22/30 V. 1.0

2.9.3 Objekt-Hierarchie in Excel
Das oberste Objekt in der Hierarchie ist die Application. Es gibt immer nur ein Application-
Objekt, da es von dem ausfhrbaren Programm excel.exe unter Windows nur eine Instanz
geben kann. Das Programm excel.exe kann aber mehrere xls-Dateien (Arbeitsmappe,
workbook) gleichzeitig geffnet haben. Deshalb gibt es in der unter Application-Objekt
liegenden Ebene die Workbooks-Objekte, deren Anzahl von den aktuell geffneten xls-
Dateien abhngt. In der nchst tiefer gelegenen Ebene befinden sich die worksheets-
Objekte, deren Anzahl von den vorhandenen Tabellenblttern pro Arbeitsmappe abhngt.
Jedes der genannten Objekte enthlt weitere Objekte, Eigenschaften und Methoden.
Das unten gezeigte Bild zeigt eine mgliche Objekt-Hierarchie in Excel bei 2 geffneten
Arbeitsmappen und jeweils 2 vorhandenen Tabellenblttern.

Um das erste Tabellenblatt der zweiten Arbeitsmappe zu aktivieren, knnen Sie die Activate-
Methode verwenden:

Application.Workbooks(2).Worksheets(1).Activate

Da die Adressierung von Objekten mittels Indizes schlecht lesbar und auch fehleranfllig ist,
gibt es zustzlich die Mglichkeit den Namen der Arbeitsmappe oder des Tabellenblattes
anzugeben:

Application.Workbooks(test.xls).Worksheets(Tabelle1).Activate

Das Application-Objekt enthlt weitere Objekte wie das Worksheetfunction-Objekt, das alle
Excel-Tabellenfunktionen enthlt. Die StatusBar-Eigenschaft ermglicht das Schreiben einer
Zeichenfolge in die Statuszeile in der unteren linken Ecke des Anwendungsfensters.

Application.StatusBar = Bin gerade am Rechnen, das kann dauern

In vielen Fllen, besonders beim Schreiben und Lesen von Zellwerten, kann die lange
Angabe der Application-, Workbooks- und Worksheets-Objekte entfallen. Es wird dann das
gerade aktive Tabellenblatt verwendet. Siehe hierzu auch das Range-Objekt.
2.9.4 With-Anweisung
Mit der With-Anweisung kann eine Reihe von Anweisungen fr ein bestimmtes Objekt
ausfhrt werden, ohne dass der Namen des Objekts mehrmals angeben werden muss.
Application
Workbooks(1)
Worksheets(1)
Worksheetfunction
StatusBar, Name, etc.
Workbooks(2)
Worksheets(1) Worksheets(2) Worksheets(2)
Cells
Rows
Activate
Select
Columns
Range
Cells
Rows
Activate
Select
Columns
Range
Cells
Rows
Activate
Select
Columns
Range
Cells
Rows
Activate
Select
Columns
Range

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 23/30 V. 1.0

Dies verbessert die Lesbarkeit besonders bei langen Namen, die aus mehreren Objekten
zusammengesetzt sind. Die With-Anweisung kann geschachtelt werden.

Syntax

With Objekt
[Anweisungen]
End With

Beispiel

With Worksheets("Tabelle1").Range("A1:C10")
.Value = 30
.Interior.Color = RGB(255, 255, 0) ' gelber Hintergrund
With .Font
.Name = "Arial"
.Bold = True
.Size = 8
.Color = RGB(0, 0, 200) ' blaue Zeichen
End With
End With

2.9.5 Range-Objekt
Mit dem Range-Objekt (Range=Bereich) knnen Sie komfortabel auf einzelne Zellen oder
Zellbereiche in Tabellenblttern zugreifen. Dabei knnen Sie sowohl Werte in Zellen
schreiben als auch lesen oder die Eigenschaften (Farbe etc.) der Zellen ndern. Es gibt eine
groe Anzahl von Methoden und Eigenschaften, die zu dem Range-Objekt gehren. Einige
wichtige sollen hier vorgestellt werden.

Beispiele

Die folgende Anweisung schreibt die Zahl 3 in die Zelle A3 und die darauf folgende
Anweisung selektiert die Zelle A2 im aktuellen Tabellenblatt.

Range("A3").Value = 3 ' Zelle A3 erhlt den Wert 3 zugewiesen
Range("A2").Select ' Zelle A2 wird selektiert

In dem nchsten Beispiel wird in den Zellbereich A1, A2, und
A3 der Wert 4 geschrieben:

Range("A1:A3").Value = 4

Mit der folgenden Anweisung wird das Tabellenblatt Tabelle2 als aktives Blatt gesetzt. Alle
folgenden Anweisungen mit Range verwenden dann Tabelle2.

Worksheets("Tabelle2").Activate ' Tabelle2 ist jetzt aktives Blatt

Alternative zu Range kann auch die Cells-Methode verwendet werden, die anstelle von
Zellnamen eine Adressierung wie bei Matrizen mit Zeilen und Spalten verwendet.

Schriftgre von Zelle in Zeile 5 und Spalte 3 der Tabelle 1 wird auf Gre 14 gesetzt
Worksheets(Tabelle1).Cells(5,3).Font.Size = 14

Besonders interessant ist die Anwendung des Range-Objekts im Zusammenhang mit
Funktionen. Das folgende Beispiel zeigt die Funktion MySum, die die Summe aus mehreren
untereinander stehenden Zellwerten berechnet (hnlich wie die Excel-Funktion SUMME() )


F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 24/30 V. 1.0

Die Count-Eigenschaft gibt einen Long-Wert zurck, der die Anzahl der Elemente in der
angegebenen Auflistung angibt.

Public Function MySum(r As Range)
Dim i As Long, n As Long

n = r.Rows.Count ' Anzahl der markierten Zellen

MySum = 0
For i = 1 To n
MySum = MySum + r.Cells(i, 1)
Next i
End Function

2.9.6 WorksheetFunction-Objekt
In dem Worksheetfunction-Objekt sind alle Microsoft Excel-Funktionen enthalten, die Sie aus
dem Funktionsassistenten in Excel kennen. Diese Funktionen knnen Sie auch in Ihren
eigenen Visual Basic Programmen verwenden. Sie drfen nur die englischen Namen der
Funktionen verwenden.
In VBA ist die Konstante nicht definiert, wohl aber enthlt das Worksheetfunction-Objekt
die Eigenschaft Pi:

Dim myPi As Double
myPi = Application.Worksheetfunction.Pi

2.10 Ntzliche Funktionen
2.10.1 InputBox
Diese Funktion ffnet ein Dialogfenster mit einem
Textfeld, in das eine Zeichenfolge eingeben werden
kann. Die Funktion gibt einen Wert vom Typ string
zurck. Wenn der Datentyp der Variablen, die den
Rckgabewert der InputBox erhlt, von einem
anderen Datentyp als string ist, wird eine Typumwandlung durchgefhrt (siehe Beispiel).

Syntax

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

Beispiele:

Dim i As Integer

i = InputBox("Geben Sie eine Ganzzahl ein")

Dim str As String

str = InputBox("Geben Sie eine Zeichenfolge ein")


Hinweise

Mit dem zweiten Parameter title wird der Text in der Titelleiste der InputBox bestimmt. Der
dritte Parameter default ermglicht einen Voreinstellungswert in das Textfeld zu schreiben.


F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 25/30 V. 1.0

2.10.2 MsgBox
Die Funktion MsgBox (Messagebox) ffnet ein Fenster, um dem Anwender besondere
Hinweise zum Programmablauf zu geben. blicherweise wird diese Funktion verwendet,
wenn Fehler aufgetreten sind oder Zwischenwerte ausgegeben werden sollen.

Syntax

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

Hinweise

Mit dem Parameter buttons kann das Erscheinungsbild des Fensters verndert werden.
Folgende Parameter sind mglich:

vbOKOnly Zeigt nur die Schaltflche OK an
vbYesNo Zeigt die Schaltflchen Ja und Nein an
vbYesNoCancel Zeigt zustzlich zu Ja und Nein die Schaltflche Abbrechen an
vbCritical Zeigt die Meldung mit dem Stop-Symbol an

Mit dem dritten Parameter title wird der Text in der Titelleiste der MsgBox bestimmt.

Beispiel


MsgBox "unerwarteter Fehler", vbCritical, "Programmierfehler"



3 Steuerelemente und Userform-Fenster
Steuerelemente (Schaltflchen) knnen sowohl auf Tabellenblttern als auch auf Userform-
Fenstern (Formulare, Dialoge) platziert werden.


Bild Deutsche Bezeichnung Englische Bezeichnung

Befehlsschaltflche CommandButton

Bezeichnungsfeld Label

Textfeld TextBox

Kombinationsfeld ComboBox

Kontrollkstchen CheckBox

Optionsfeld OptionButton

Rahmen Frame

Einige Steuerelemente

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 26/30 V. 1.0

3.1 Einfgen einer Schaltflche zum Starten von Prozeduren
Mit einer Befehlsschaltflche, die an einer beliebigen Stelle auf dem Tabellenblatt platziert
werden kann, knnen Sie auf einfache Weise sub-Prozeduren starten. Dazu mssen sie
zuerst in den Entwurfsmodus wechseln. Danach klicken Sie auf das Symbol
Steuerelement-Toolbox . Es erscheint dann eine verschiebbare Symbolleiste, aus der Sie
die Befehlsschaltflche durch Anklicken auswhlen. Mit der Maus bewegen Sie das nun
erscheinende Fadenkreuz an die Stelle, an der sich die Schaltflche befinden soll, und
ziehen sie bei gedrckter linker Maustaste diagonal auf.



Danach klicken Sie mit der rechten Maustaste auf die Schaltflche und whlen aus dem
erscheinenden Kontextmen Eigenschaften aus. In dem
Eigenschaftsdialog ndern Sie die Beschriftung (Caption) der
Schaltflche von CommandButton1 zu Rechnen. Danach ndert
sich der Text auf der Befehlsschaltflche.
Als nchstes mssen Sie der Befehlsschaltflche eine sub-
Prozedur zuordnen, die nach dem Anklicken ausgefhrt wird.
Dazu klicken Sie wieder mit der rechten Maustaste auf die
Schaltflche und whlen Code anzeigen aus. Es wird das Visual
Basic Editor Fenster geffnet. In dem Code Fenster steht ein
sub-Prozedur Gerst mit Namen CommandButton1_Click(), in
das Sie beliebigen Basic Code einfgen knnen. Diese Prozedur
wird immer dann ausgefhrt, wenn Sie die Befehlsschaltflche
auf dem Tabellenblatt anklicken.







Private Sub CommandButton1_Click()

End Sub

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 27/30 V. 1.0

3.2 Kombinationsfeld
Das Kombinationsfeld besteht aus einem Textfeld und einer Listbox
und bietet sich zur Eingabe an, wenn im Normalfall nur bestimmte
Werte eingegeben werden sollen. Beim Anklicken ffnet sich das
Listenfeld, aus dem eine Option ausgewhlt werden kann. Alternativ
kann in dem Textfeld aber auch ein Wert
eingetippt werden.
Wie beim Erstellen einer Schaltflche
mssen sie zuerst in den Entwurfsmodus
wechseln und auf das Symbol
Steuerelement-Toolbox klicken. In der
Toolbox whlen Sie das Kombinationsfeld aus und bestimmen mit dem
erscheinenden Fadenkreuz die Lage und Abmessungen auf dem
Tabellenblatt. Damit das Listenfeld mit auszuwhlenden Werten gefllt
werden kann, sind mehrere Schritte erforderlich. Die einfachste Lsung
wird hier beschrieben: Die zur Auswahl stehenden Werte schreiben Sie
in einen Zellbereich Ihrer Wahl, z.B. in ein neues Tabellenblatt, welches
nur fr Hilfswerte benutzt wird. Dann ffnen Sie das
Eigenschaftsfenster des Kombinationsfeldes und tragen den Bereich in
die Zeile ListFillRange ein, z.B. Tabelle2!A1:A4 .
Den gewhlten Eintrag knnen sie mit folgender Anweisung in Ihrem
VBA-Programm einlesen:

Dim eulerfall As Integer
eulerfall = ComboBox1.Value ' eulerfall erhlt Wert des selektierten Eintrags in der Listbox

Weitere Beispiele

Dim i
ComboBox1.ListIndex = 0 ' whlt ersten Eintrag in Listbox aus. Achtung: Index beginnt mit 0
i = ComboBox1.ListIndex ' i erhlt die Indexnummer des selektierten Eintrags in der Listbox

Hinweise

Die Beispieldatei Kombinationsfeld.xls enthlt zwei Varianten zum Arbeiten mit
Kombinationsfeldern. Die ersten Variante benutzt die Schaltflche Rechnen, um eine
Berechnung zu starten. Nach dem Anklicken der Schaltflche wird die Prozedur
CBRechnen_Click() im Modul Tabelle1 aufgerufen.
Die zweite Version benutzt die Funktion TestComboBox(i) im Modul Funktionen. Diese
Funktion wird im Tabellenblatt Tabelle1 in Zelle C9 verwendet. Die Verwendung von
Kombinationsfeldern in Tabellenblttern stellt ein Problem dar, da eine nderung der
Auswahl keine automatische Neuberechnung des Tabellenblattes startet. Deshalb muss eine
Neuberechnung erzwungen werden. Sie erreichen dies dadurch, dass Sie das
Kombinationsfeld mit einer Zelle verknpfen. Dazu tragen sie im Ereignisfenster des
Kombinationsfeldes in der Zeile LinkedCell eine Zelladresse ein (im Beispiel C4). Diese
Zelladresse wird auch als bergabeparameter fr die Funktion TestComboBox(i) verwendet.
Da TestComboBox jetzt von Zelle C4 abhngig ist, wird bei einer nderung im
Kombinationsfeld eine Neuberechnung ausgefhrt.
Eine bersicht ber die zur Verfgung stehenden Methoden, die im Zusammenhang mit dem
Kombinationsfeld verwendet werden knnen, finden sie in den beiden Listboxen oberhalb
des Codefensters.


Vorhandene
Objekte
Zugehrige
Methoden

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 28/30 V. 1.0

3.3 Benutzerformulare
Um ein neues Benutzerformular (Dialog) zu erstellen, whlen Sie im VBA-Editor in der
Menleiste Einfgen/Userform. Es wird ein neues Fenster mit einem Dialog und ein Fenster
Werkzeugsammlung mit verschiedenen Steuerelementen geffnet. Mit der Funktionstaste F4
ffnen Sie zustzlich das Eigenschaftsfenster. ndern sie zuerst im Eigenschaftsfenster den
Namen und die Caption des Dialogs (Userform) von Userform1 zu zum Beispiel
Eingabedialog.



Wie in Kapitel 3.1: Einfgen einer Schaltflche zum Starten von Prozeduren beschrieben,
knnen Sie nun einzelne Steuerelemente auf der Dialogflche platzieren. Damit Sie spter
die einzelnen Steuerelemente auswerten und verndern knnen, sollten Sie im
Eigenschaftsfenster diesen einen selbsterklrenden Namen geben. Zum Beispiel ist der
Name TextBoxVorname leichter zuzuordnen als TextBox1, wenn in das Textfeld der
Vorname einzugeben ist.
Jeder Dialog sollte mindestens einen OK-Button (Befehlsschaltflche) haben. Durch diese
Schaltflche wird der Dialog beendet und die Eingabefelder zuvor ausgelesen. Zeichnen Sie
zuerst den Button, ndern dann den Namen (z.B. CB_OK) und klicken zweimal auf den
Button. Es wird dann das Codefenster geffnet und die Prozedur CB_OK_Click() angezeigt,
die immer ausgefhrt wird, wenn die Schaltflche angeklickt wird. Die Prozedur wird dazu
benutzt, die Eingabefelder auszulesen und dann den Dialog zu schlieen. Der Dialog wird
durch die Anweisung Unload Name_des_Dialogs geschlossen.

Dim text As String

Private Sub CB_OK_Click()
text = TextBoxVorname ' Eingabe aus Textfeld mit Namen TextBoxVorname sichern
Unload Eingabedialog ' Dialog schliessen
End Sub

Die Variable text muss natrlich auerhalb der Prozedur CB_OK_Click() deklariert sein,
damit sie in anderen Prozeduren weiter verwendet werden kann.
Der Dialog wird mit der Methode show durch folgende Anweisung geffnet:

Eingabedialog.Show
TextBoxVorname
CB_OK
Caption

F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 29/30 V. 1.0


Die Dateien Formular.xls und Userform.xls enthalten Beispiele fr die Anwendung von
Dialogen. In der Datei Formular.xls werden die Dialoge mit Hilfe von Schaltflchen im
Tabellenblatt geffnet. In der Datei Userform.xls werden die Dialoge durch einen neuen
Eintrag Kunden in der Menleiste gestartet. Diese Form macht einen sehr professionellen
Eindruck, ist allerdings vergleichsweise aufwendig zu implementieren, nheres hierzu in [2].
4 Literatur
[1] Ren Martin: Workshop VBA, Addison-Wesley, 2000
[2] Reinke Solutions Team: Microsoft Excel 2000 Das Handbuch, Microsoft Press, 2000
[3] Matthew Harris: Visual Basic for Applications in 21 Tagen, SAMS, 1998
[4] Michael Kofler: Excel 2000 programmieren, Anwendungen erstellen mit Visual Basic fr
Applikationen, Addison-Wesley, 2000
[5] Benno Brudermanns, Ernst Tiemeyer: Excel 2000 fr Profis. Programmieren mit VBA,
Rowohlt TB-Verlag, rororo Computer, 2000
[7] Bernd Held: Excel-VBA-Programmierung - Kompendium . VBA-Lsungen fr die Praxis,
Markt+Technik, 2001
[8] Bernd Held: Excel-VBA-Programmierung - Kompendium . VBA-Antworten fr die Praxis,
Markt+Technik, 2000

5 Anhang
5.1 Schlsselwrter
Folgende Wrter haben in VBA besondere Bedeutung und knnen nicht als Variablen- oder
Funktionsnamen verwendet werden.

As
Base
Binary
Boolean
ByRef
Byte
ByVal
Call
Case
Const
Currency
Date
Decimal
Dim
Do
Double
Else

Empty
End
Error
Exit
False
For
Friend
Function
Get
Input
If
Integer
Is
Len
Let
Lock
Long

Loop
Me
Mid
New
Next
Nothing
Null
Object
On
Option
ParamArray
Print
Private
Property
Public
ReDim
Resume

Seek
Select
Set
Single
Static
Step
String
Sub
Then
Time
To
True
Type
Until
Variant
While
WithEvents



F ACHBEREICH BAUINGENIEURWESEN
VBA EDV Anwendungen im Bauwesen II

Rothe 30/30 V. 1.0


5.2 Symbole im Objektkatalog und im Code-Fenster
Der Objektkatalog und das Code-Fenster enthalten mehrere Symbole zur Darstellung von
Klassen und Elementen. In der folgenden Tabelle finden Sie eine Liste der Symbole und
deren Bedeutung.

Symbol: Bedeutung: Symbol: Bedeutung:

Eigenschaft

Klasse

Standardeigenschaft

Benutzerdefinierter Typ

Methode

Global

Standardmethode

Bibliothek

Ereignis

Projekt

Konstante

Integrierte Schlsselwrter und Typen

Modul

Aufzhlung (Enum)

5.3 Abkrzungen fr Datentypen
Die Deklaration des Datentyps einer Variablen mit der Dim_Anweisung kann alternativ zu As
Datentyp auch durch ein reserviertes Sonderzeichen erfolgen.

Zeichen Datentyp Beispiel
% Integer Dim var%
& Long Dim var&
! Single Dim var!
# Double Dim var#
@ Currency Dim var@
$ String Dim var$

5.4 Shortcuts in VBA

Shortcut Beschreibung Shortcut Beschreibung
F1 VBA-Hilfe F7 Code-Fenster anzeigen
F2 Objektkatalog anzeigen F8 Zeilenweises Ausfhren von
Code (Einzelschritt)
F3 Weitersuchen F9 Setzen oder Lschen eines
Haltepunkts
F4 Anzeigen des
Eigenschaftsfensters
STRG+PAUSE Unterbrechen der Ausfhrung
einer Visual Basic-Anwendung
F5 Fortsetzen der Ausfhrung einer
Anwendung
UMSCHALT+F8 Zeilenweises Ausfhren von
Anweisungen, ohne
Prozeduraufrufe zu verwenden
F6 Wechseln zwischen Code-
Bereichen bei geteiltem Fenster
STRG+
UMSCHALT+F9
Alle Haltepunkte lschen