Sie sind auf Seite 1von 30

FACHBEREICH BAUINGENIEURWESEN

VBA Programmierung mit Excel

Kurzanleitung zum Arbeiten mit

VISUAL BASIC
FR APPLIKATIONEN

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

Detlef Rothe

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

Inhaltsverzeichnis
1 2 Einleitung ....................................................................................................................................... 3 Sprachbeschreibung VBA ............................................................................................................ 6 2.1 2.2
2.2.1 2.2.2 2.2.3 2.2.4 2.2.5

Anweisung ............................................................................................................................... 6 Variablen und Konstanten ....................................................................................................... 6


Zuweisung ......................................................................................................................................... 7 Kommentarzeilen............................................................................................................................... 7 Datentypen (Zusammenfassung)....................................................................................................... 8 Arithmetische Operatoren.................................................................................................................. 8 Verkettungsoperator &....................................................................................................................... 9

2.3
2.3.1 2.3.2 2.3.3 2.3.4

Verzweigungen ........................................................................................................................ 9
If...Then...Else-Anweisung................................................................................................................. 9 Vergleichsoperatoren....................................................................................................................... 10 Logische Operatoren ....................................................................................................................... 10 Select CaseAnweisung.................................................................................................................. 11

2.4
2.4.1 2.4.2

Schleifen ................................................................................................................................ 12
For...Next-Anweisung ...................................................................................................................... 12 DoLoopAnweisung ..................................................................................................................... 12

2.5
2.5.1 2.5.2

Datenfelder ............................................................................................................................ 13
Statische Datenfelder ...................................................................................................................... 13 Dynamische Datenfelder ................................................................................................................. 14

2.6
2.6.1 2.6.2 2.6.3

Prozeduren ............................................................................................................................ 15
SubAnweisung............................................................................................................................... 16 FunctionAnweisung ....................................................................................................................... 17 bergabeparameter......................................................................................................................... 17

2.7 2.8 2.9


2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6

Module ................................................................................................................................... 18 Benutzerdefinierter Datentyp................................................................................................. 18 Objekte .................................................................................................................................. 20


Einleitung......................................................................................................................................... 20 Erluterungsbeispiel ........................................................................................................................ 20 Objekt-Hierarchie in Excel ............................................................................................................... 22 With-Anweisung............................................................................................................................... 22 Range-Objekt................................................................................................................................... 23 WorksheetFunction-Objekt .............................................................................................................. 24

2.10

Ntzliche Funktionen ............................................................................................................. 24


InputBox ...................................................................................................................................... 24 MsgBox ....................................................................................................................................... 25

2.10.1 2.10.2

Steuerelemente und Userform-Fenster..................................................................................... 25 3.1 3.2 3.3 Einfgen einer Schaltflche zum Starten von Prozeduren.................................................... 26 Kombinationsfeld ................................................................................................................... 27 Benutzerformulare ................................................................................................................. 28

4 5

Literatur ........................................................................................................................................ 29 Anhang ......................................................................................................................................... 29 5.1 5.2 5.3 5.4 Schlsselwrter ..................................................................................................................... 29 Symbole im Objektkatalog und im Code-Fenster.................................................................. 30 Abkrzungen fr Datentypen................................................................................................. 30 Shortcuts in VBA.................................................................................................................... 30

Rothe

2/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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

Rothe

3/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 erscheint ein neues zustzliches Fenster:

. Es

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.

Rothe

4/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 die Excel-Tabelle zurckkehren. in der Symbolleiste knnen Sie

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!

Rothe

5/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 a=1:b=2 If a > b Then Text = Das Haus ist grn & _ und der Sommer ist schn Deklaration von 2 Variablen 2 Anweisungen in einer Zeile If-Anweisung 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 1a Max. Moment Das_Haus_ist_grn If Zulssig Unzulssig, da erstes Zeichen eine Ziffer Unzulssig, da Leerzeichen. Auerdem ist der Punkt in diesem Zusammenhang unzulssig (siehe Objekte) Zulssig Unzulssig, da if ein Schlsselwort der Sprache ist

Rothe

6/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 b = (1+5) / 3 a=b+c Der Variablen a wird der Wert 1 zugewiesen Das Ergebnis des Ausdrucks (=2) wird b zugewiesen 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
Rothe

' Erhhung von a um eins


7/30 V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

2.2.3 Datentypen (Zusammenfassung)


Die folgende Tabelle enthlt die von Visual Basic untersttzten Datentypen sowie deren Speicherbedarf und Wertebereiche.
Datentyp Byte Boolean Integer Long (lange Ganzzahl) Single (Gleitkommazahl mit einfacher Genauigkeit) Double (Gleitkommazahl mit doppelter Genauigkeit) Currency (skalierte Ganzzahl) Decimal Speicherbedarf 1 Byte 2 Bytes 2 Bytes 4 Bytes 4 Bytes Wertebereich 0 bis 255 True oder False -32.768 bis 32.767 -2.147.483.648 bis 2.147.483.647 -3,402823E38 bis -1,401298E-45 fr negative Werte; 1,401298E-45 bis 3,402823E38 fr positive Werte. -1,79769313486231E308 bis -4,94065645841247E-324 fr negative Werte; 4,94065645841247E-324 bis 1,79769313486232E308 fr positive Werte. -922.337.203.685.477,5808 bis 922.337.203.685.477,5807 +/-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. 1. Januar 100 bis 31. Dezember 9999. Beliebiger Verweis auf ein Objekt vom Typ Object. 0 bis ca. 2 Milliarden. 1 bis ca. 65.400 Numerische Werte im Bereich des Datentyps Double. Wie bei String mit variabler Lnge. Der Bereich fr jedes Element entspricht dem Bereich des zugehrigen Datentyps.

8 Bytes

8 Bytes 14 Bytes

Date Object String (variable Lnge) String (feste Lnge) Variant (mit Zahlen) Variant (mit Zeichen) Benutzerdefiniert (mit Type)

8 Bytes 4 Bytes 10 Bytes plus Zeichenfolgenlnge Zeichenfolgenlnge 16 Bytes 22 Bytes plus Zeichenfolgenlnge Zahl ist von Elementen abhngig

2.2.4 Arithmetische Operatoren


Zum Rechnen mit Ganz- und Dezimalzahlen stehen folgende Operatoren zur Verfgung:
Operator ^ * / \ Mod + Beschreibung Potenzierung Multiplikation Division ganzzahlige Division Modulo (Rest einer ganzzahligen Division) Addition Subtraktion Beispiel 7^3 (= 343) 3*5 (= 15) 0.45 / 0.9 (= 0.5) 7\5 (= 1) 14 Mod 5 (= 4) 3+4 (= 7) 34 (= -1)

Rothe

8/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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

Rothe

9/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 < (Kleiner als) <= (Kleiner oder gleich) > (Grer als) >= (Grer oder gleich) = (Gleich) <> (Ungleich) True, wenn Ausdruck1 < Ausdruck2 Ausdruck1 <= Ausdruck2 Ausdruck1 > Ausdruck2 Ausdruck1 >= Ausdruck2 Ausdruck1 = Ausdruck2 Ausdruck1 <> Ausdruck2 False, wenn Ausdruck1 >= Ausdruck2 Ausdruck1 > Ausdruck2 Ausdruck1 <= Ausdruck2 Ausdruck1 < Ausdruck2 Ausdruck1 <> Ausdruck2 Ausdruck1 = Ausdruck2

2.3.3 Logische Operatoren


Mit logischen Operatoren werden zwei logische Ausdrcke verknpft.
Operator And Or Not Beschreibung Logisches UND Logisches ODER Logische Negation Beispiel Dim b As Boolean b = 1<5 AND 7>6 (=true) b = 1<5 OR 6>7 (=true) 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.
Rothe 10/30 V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

2.3.4 Select CaseAnweisung


Verwenden Sie die Select Case-Anweisung als Alternative zu ElseIf in If...Then...ElseAnweisungen, 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 CaseAbschnitt 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 CaseAusdrucksliste 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

Rothe

11/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 MsgBox "i = " & i Next i i erhlt die Werte 1, 3 und 5

2.4.2 DoLoopAnweisung
Die While-Schleife wird, solange die Bedingung erfllt ist, wiederholt. Dagegen wir die UntilSchleife 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 nichtabweisenden Schleife werden mindestens einmal ausgefhrt, da die berprfung erst am Ende der Schleife stattfindet. Syntax Abweisende Schleife Do [{While | Until} Bedingung] [Anweisungen] [Exit Do] [Anweisungen] Loop Nicht-Abweisende Schleife Do [Anweisungen] [Exit Do] [Anweisungen] Loop [{While | Until} Bedingung]

Rothe

12/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 j=5 i=1 abbruch = False Do i=i+1 If i = j Then abbruch = True Loop Until abbruch Dim i As Integer, j As Integer Dim abbruch As Boolean

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 Base 0 Base 1


Elementindex

Matrizen Base 0 Base 1

0 1 2 3

1 2 3 4

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

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

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

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

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

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

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

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

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.

Rothe

13/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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.

Rothe

14/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 FunctionProzeduren. 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 ExcelTabellenzelle 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.

Rothe

15/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 subProzedur bestimmt.
Teil Public Privat Static Beschreibung Auf die Sub-Prozedur kann von allen anderen Prozeduren in allen Modulen zugegriffen werden. Auf die Sub-Prozedur kann nur durch andere Prozeduren aus dem Modul zugegriffen werden, in dem sie deklariert wurde. Die lokalen Variablen der Sub-Prozedur bleiben zwischen Aufrufen erhalten. Das Attribut Static wirkt sich nicht auf Variablen aus, die auerhalb der SubProzedur 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 Cells(row, col).value = wert End Sub Aufruf der sub-Prozedur writeToActiveWorksheet(): Dim str ... str = "Guten Tag" Call writeToActiveWorksheet(2, 1, str) ' Wenn Variable wert leer ist, dann braucht nix gemacht zu werden

Rothe

16/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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
Rothe 17/30 V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 DimAnweisung 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
Rothe 18/30 V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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
Rothe 19/30 V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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.

Rothe

20/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

Tragwerk

1.Ebene

Decken

Sttzen

Dach

2.Ebene

Decke KG

Decke EG

Sparren Breite Hhe Lnge Material Festigkeit

Pfetten

Pfosten

3.Ebene

Eigenschaften

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.

Rothe

21/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

2.9.3 Objekt-Hierarchie in Excel


Das oberste Objekt in der Hierarchie ist die Application. Es gibt immer nur ein ApplicationObjekt, 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 xlsDateien abhngt. In der nchst tiefer gelegenen Ebene befinden sich die worksheetsObjekte, 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.
Application

Workbooks(1)

Worksheetfunction StatusBar, Name, etc.

Workbooks(2)

Worksheets(1) Cells Rows Activate Select Columns Range

Worksheets(2) Cells Rows Activate Select Columns Range

Worksheets(1) Cells Rows Activate Select Columns Range

Worksheets(2) Cells Rows Activate Select Columns Range

Um das erste Tabellenblatt der zweiten Arbeitsmappe zu aktivieren, knnen Sie die ActivateMethode 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.
Rothe 22/30 V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 Range("A2").Select ' Zelle A3 erhlt den Wert 3 zugewiesen ' 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() )
Rothe 23/30 V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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.

Rothe

24/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 vbYesNo vbYesNoCancel vbCritical Zeigt nur die Schaltflche OK an Zeigt die Schaltflchen Ja und Nein an Zeigt zustzlich zu Ja und Nein die Schaltflche Abbrechen an 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 UserformFenstern (Formulare, Dialoge) platziert werden.
Bild Deutsche Bezeichnung Befehlsschaltflche Bezeichnungsfeld Textfeld Kombinationsfeld Kontrollkstchen Optionsfeld Rahmen
Einige Steuerelemente

Englische Bezeichnung CommandButton Label TextBox ComboBox CheckBox OptionButton Frame

Rothe

25/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 wechseln. Danach klicken Sie auf das Symbol zuerst in den Entwurfsmodus . Es erscheint dann eine verschiebbare Symbolleiste, aus der Sie Steuerelement-Toolbox 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 subProzedur 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

Rothe

26/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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 klicken. In der Steuerelement-Toolbox 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 i = ComboBox1.ListIndex ' whlt ersten Eintrag in Listbox aus. Achtung: Index beginnt mit 0 ' 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

Rothe

27/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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.

Caption

TextBoxVorname

CB_OK

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
Rothe 28/30 V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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] [2] [3] [4] [5] [7] [8] Ren Martin: Workshop VBA, Addison-Wesley, 2000 Reinke Solutions Team: Microsoft Excel 2000 Das Handbuch, Microsoft Press, 2000 Matthew Harris: Visual Basic for Applications in 21 Tagen, SAMS, 1998 Michael Kofler: Excel 2000 programmieren, Anwendungen erstellen mit Visual Basic fr Applikationen, Addison-Wesley, 2000 Benno Brudermanns, Ernst Tiemeyer: Excel 2000 fr Profis. Programmieren mit VBA, Rowohlt TB-Verlag, rororo Computer, 2000 Bernd Held: Excel-VBA-Programmierung - Kompendium . VBA-Lsungen fr die Praxis, Markt+Technik, 2001 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

Rothe

29/30

V. 1.0

FACHBEREICH BAUINGENIEURWESEN

VBA

EDV Anwendungen im Bauwesen II

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: Eigenschaft Standardeigenschaft Methode Standardmethode Ereignis Konstante Modul Symbol: Bedeutung: Klasse Benutzerdefinierter Typ Global Bibliothek Projekt Integrierte Schlsselwrter und Typen 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 Integer Long Single Double Currency String Beispiel Dim var% Dim var& Dim var! Dim var# Dim var@ Dim var$

5.4 Shortcuts in VBA


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

Rothe

30/30

V. 1.0