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
ArraysDEFINITION: 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)
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)
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"
StringsEbenso 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
Public Sub IncrementScoreAndDisplay()
Score = Score + 1
MsgBox("Score = " & Str(Score))
End Sub
Public Sub RecurseDecrement()
Score = Score - 1
MsgBox("Score = " & Str(Score))
If Score <> 0
RecurseDecrement()
End If
End Sub
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")