Beruflich Dokumente
Kultur Dokumente
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