Vba Script

  • Upload
    kamy-g

  • View
    103

  • Download
    1

Embed Size (px)

Citation preview

  • FACHBEREICH BAUINGENIEURWESEN Kurzanleitung zum Arbeiten mit

    VISUAL BASIC

    FR APPLIKATIONEN

    Detlef Rothe

    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

  • FACHBEREICH 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

  • FACHBEREICH 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

  • FACHBEREICH 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.

  • FACHBEREICH 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!

  • FACHBEREICH 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

  • FACHBEREICH 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

  • FACHBEREICH 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)

  • FACHBEREICH 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

  • FACHBEREICH 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 (Grer als) Ausdruck1 > Ausdruck2 Ausdruck1 = (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 = 16 (=true) Or Logisches ODER b = 17 (=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.

  • FACHBEREICH 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

  • FACHBEREICH 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]

  • FACHBEREICH 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

    3210

    4321

    3,32,31,30,33,22,21,20,23,12,11,10,13,02,01,00,0

    4,43,42,41,44,33,32,31,34,23,22,21,24,13,12,11,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

  • FACHBEREICH 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.

  • FACHBEREICH 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.

  • FACHBEREICH 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)

  • FACHBEREICH 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

  • FACHBEREICH 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

  • FACHBEREICH 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

  • FACHBEREICH 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.

  • FACHBEREICH 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

  • FACHBEREICH 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

  • FACHBEREICH 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() )

  • FACHBEREICH 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.

  • FACHBEREICH 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

  • FACHBEREICH 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

  • FACHBEREICH 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

    ZugehrigeMethoden

  • FACHBEREICH 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

  • FACHBEREICH 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

  • FACHBEREICH 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