Print
Mittwoch, 6. Juni 2007 |

VBA Tutorial - Teil 2

Das Tutorial ist kein "VBA for Excel" oder "VBA for Word" Tutorial, sondern soll euch einfach einen allgemeinen Einblick in VBA (Visual Basic for Applications, der Skriptsprache für Windows) geben.


Die hier dargestellten Funktionsreferenzeren sind nicht vollständig! Alle können in der "Language Reference" von VBA in der Hilfe nachgeschlagen werden. Sie sollen nur eine übersicht über wichtige und häufig genutzte Befehle geben.



 

Integers

Zahlentheorie ist die wichtigste in der Programmierung. Die meisten Programmiersprachen übertreffen in ihrem Funktions-
umfang die meisten Taschenrechner bei weitem. So auch VBA

Anmerkung: Es gibt auch unter den Zahlen noch verschiedenen Typen, so wie Integer (die ganzen Zahlen)
und Float (Kommazahlen). Damit der Compiler das besser unterscheiden kann deklariert man Datentypen
immer mit dem Wert, z.B.:


    Dim Score As Integer





Abs()
    Gibt den Wert der Zahl ohne Vorzeichen zurück

    Beispiel:    Abs(200-500)
    Ergebnis:    300

Cos()
    Gibt den Cosinus einer Zahl zurück

    Beispiel:    Cos(0)
    Ergebnis:    1

Fix()
    Ermm... ungefähr dasselbe wie "Sgn(number) * Int(Abs(number))" :)

    Beispiel:    Int(-8.4)
    Ergebnis:    -8

Int()
    Gibt den gerundeten Wert einer Zahl zurück

    Beispiel:    Int(-8.4)
    Ergebnis:    -9

Rnd ()
    Gibt eine zufällige Zahle zwischen 0 und 1 aus (genauer 0 <= x < 1)

    Beispiel:    Rnd()
    Ergebnis:    .2532721


Sgn()
    Überprüft die Zahl, ob sie Positiv (1), Negativ (-1) oder Null (0) ist.

    Beispiel:    Sgn(1000)
    Ergebnis:    1

Sqr()
    Gibt die Wurzel einer Zahl zurück

    Beispiel:    Sqr(4)
    Ergebnis:    2.0


Arrays

DEFINITION:    Ein Array ist eine Sammlung von Werten mit demselben Datentyp,
                die unter einem Namen zusammengefasst werden

Beispiel: Du hast 3 Automarken. Für jede Marke eine eigene Variabel wäre ziemlich unübersichtlich, vor allem wenn du irgendwann mal 100 Automarken hast


    Dim cars(3)        'erzeuge ein Array mit 3 Elementen

    ' Fülle das Array
    cars(1) = "Audi"
    cars(2) = "VW"
    cars(3) = "BMW"




Du kannst die Werte genauso einfach abfragen:


    MsgBox(cars(3))



Der Befehl öffnet eine MsgBox mit der Nachricht "BMW"

Ein Array kann auch aus mehreren Ebenen bestehen. Man nennt das "Multidimensionale Arrays" - Du kannst in VBA bis zu 60 Dimensionen erzeugen.

Folgender Befehl erzeugt einen 2 dimensionalen Array:


    Dim cars(3,2)        'erzeuge einen 3 elementigen Array mit 2 Dimensionen

    ' Fülle das Array
    cars(1,1) = ”Audi”
    cars(1,2) = ”A3”
    cars(2,1) = ”Audi”
    cars(2,2) = ”A4”
    cars(3,1) = ”Audi”

    cars(3,2) = ”A6”



Du kannst die Werte wieder genauso abfragen:


    MsgBox("Ich fahre einen " & cars(3,1) & ” “ & cars(3,2))



Der Befehl öffnet eine MsgBox mit der Nachricht "Ich fahre einen Audi A6"


Strings

Ebenso wie Arithmetische Funktionen für Zahlen stellt VBA auch für Strings (zeichenketten) operationen zur Verfügung
Hier mal alphabetisch geordnet:

Asc()
    Gibt den ASCII character code des ersten Buchstaben des Strings zurück

    Beispiel: Asc(“F”)
    Ergebnis: 70

Chr()
    Gibt den Buchstaben zu dem Ascii wert zurück

    Beispiel: Chr(100)
    Ergebnis: d

InStr()
    Gibt zurück ab dem wievielten Buchstaben die Strings diesselbe Zeichenfolge haben

    Beispiel:Instr(“Matthias = Ösi”, “hias”)
    Ergebnis:5

Lcase ()
    Gibt denselben String zurück, bloß komplett klein geschrieben

    Beispiel:Lcase (“Ösi”)
    Ergebnis:ösi

Left( )
    Gibt den Sub-string mit der übergebenen Länge zurück


    Beispiel:Left(“Matthias”,4)
    Ergebnis:Matt

Len()
    Gibt die Länge eines Strings zurück

    Beispiel:Len(”Matthias”)
    Ergebnis:8


LTrim( )
    Entfernt alle Leerzeichen links

    Beispiel:Ltrim(“ Ösi”)
    Ergebnis: Ösi


Mid()
    Gibt einen bereich des Strings zurück.

    Beispiel:Mid(“Matthias Kainer”,6,5)
    Ergebnis:ias K

Right()
    Gibt den Sub-string mit der übergebenen Länge zurück, beginnend von rechts

    Beispiel:Right("Matthias Kainer" ,6)
    Ergebnis:ias Kainer

RTrim()
    Entfernt alle Leerzeichen rechts

    Beispiel:Rtrim("Ösi “)
    Ergebnis:Ösi

Str( )
    Übersetzt eine Zahl in einen String. Wenn die nummer pos ist beginnt sie mit einem Leerzeichen

    Beispiel:Ltrim(Str(2*2))
    Ergebnis:4

String()
    Gibt einen String zurück, indem der übergebene String so oft wiederholt wird wie man will

    Beispiel:String(4,"Ösi ist ein Held! ")
    Ergebnis:Ösi ist ein Held! Ösi ist ein Held! Ösi ist ein Held! Ösi ist ein Held!

Ucase ()
    Gibt den String zurück, bloß alles großgeschrieben

    Beispiel: UCase(String(4,"Ösi ist ein Held! "))
    Ergebnis:ÖSI IST EIN HELD! ÖSI IST EIN HELD! ÖSI IST EIN HELD! ÖSI IST EIN HELD!

Val ()
    Gibt die Zahlen im String zurück

    Beispiel:Val(“Juni 2004”)
    Ergebnis:2004



Call - Aufrufen einer subprocedure (Subroutine)

Mit der einführung von subprocedures kommt ein neues Instrument zur Programmierung dazu, das es erlaubt häufig
genutzte Schritte nicht immer wieder neu zu schreiben sondern einfach eine Funktion dafür bereitzustellen und
diese zu verwenden. Aufgerufen werden sie mit Call.
Um Variablen sowohl in der Hauptprocedure als auch in der Subprocedure zu verwenden kann man sie ausserhalb als
Public deklarieren. Hier ein Beispiel:


    Public Score As Integer

    ' Das ist jetzt unsere Subprocedure
    Public Sub IncrementScoreAndDisplay()
        Score = Score + 1
        MsgBox("Score = " & Str(Score))
    End Sub


    ' Eine komplexere Funktion
    ' Sie ruft sich so lange selber auf, bis Score 0 ist
    ' Das selber aufrufen nennt man rekursion
    Public Sub RecurseDecrement()
        Score = Score - 1
        MsgBox("Score = " & Str(Score))
        If Score <> 0
            RecurseDecrement()
        End If

    End Sub


    ' Die Funktion wird aufgerufen wenn unser Button geklickt wird
    Private Sub CommandButton1_Click()
        Score = 0
        Do
            Call IncrementScoreAndDisplay()
        Loop Until Score = 10
        Call RecurseDecrement
    End Sub





 



Erste Aufgabe:

Schreibe eine Subroutine SQRT(), die aus einer Public Variable Namens "Number" die Wurzel zieht und das Ergebnis
in einer MsgBox darstellt.

Zweite Aufgabe:
Schreibe eine Subroutine PowerOf(), die eine Public Variable Namens "Number" hoch sich selber nimmt. Wenn Number
also 2 ist, dann 2²; wenn Number 3 ist dann 3³ usw.
Gib das Ergebniss in einer MsgBox aus

Dritte Aufgabe:
Schreibe eine Subroutine RecursivePowerOf(), die praktisch dasselbe macht wie PowerOf(), aber dadurch dass sie sich
immer wieder selbst aufruft. Um das zu vereinfachen hast du noch eine Public Variable Namens "Helper" mit der du die
durchläufe deiner rekursiven Funktion zählen kannst.
Gib das Ergebniss in einer MsgBox aus

Vierte Aufgabe (Klausurniveau):
Schreibe eine Subroutine Prim(), die eine Primfaktorzerlegung einer Public Variable Namens "Number" durchführt.
Du kannst dazu so viele Public Variablen verwenden wie du willst.
Die gesammelten Primzahlen sollen in der Form "[Erste Zahl]: [Zahl], [Zahl]" ausgegeben werden (z.B: "6: 3, 2, 1")

Fünfte Aufgabe (Klausurniveau):
Schreibe eine Subroutine RecursePrim(), die eine Primfaktorzerlegung einer Public Variable Namens "Number" durchführt.
Du kannst dazu so viele Public Variablen verwenden wie du willst. Mach das ganze aber Rekursiv!
Die gesammelten Primzahlen sollen in der Form "[Erste Zahl]: [Zahl], [Zahl]" ausgegeben werden (z.B: "6: 3, 2, 1")