Aufgrund meiner langjährigen Trainer-Erfahrung im Bereich von IT- und Programmier-Schulungen habe ich mich entschlossen, meine eigene Programmier-Schulung für VBA Anfänger - bzw. eine Auswahl der dort enthaltenen Kapitel - in einem stark verkürzten, jedoch kostenlosen Online-Tutorial festzuhalten. Daher ist dieses Online-Tutorial in der Ich-Form geschrieben. Sie lesen sozusagen die Stimme des Trainers vor, der gerade das Seminar hält. Auch das oft erhaltene Feedback von Schulungsteilnehmern zu fehlender Literatur zu diesem Thema auf dem Markt brachte mich auf die Idee selber ein Buch / Tutorial für meine „Büro-Mitmenschen“ zu schreiben.
Sollten Sie Fragen haben oder auf der Suche nach weiterführenden Informationen über die VBA Programmierung sein, können Sie sich gerne auf meiner Internetseite www.wershovenonline.de umschauen und mich dort mit einem Klick per E-Mail kontaktieren.
Einen herzlichen Dank möchte ich meiner Mitautorin Anika Wershoven aussprechen. Ohne sie wäre das Tutorial nur halb so gut geworden. Vielen Dank auch an alle anderen Freunde und Bekannte, die an der Endfertigung des Tutorials beteiligt waren.
Bitte bedenken Sie, dass dieses Online-Tutorial kostenlos in unserer Freizeit erstellt wurde.
Ich wünsche Ihnen Viel Spaß bei Ihrer persönlichen Entdeckungstour!
Ihr
Marc Wershoven
Zuerst möchte ich etwas zu der in diesem Tutorial verwendeten Grundmethodik sagen:
"Von Grund auf! Die Basis muss verstanden sein, der Rest ist selbstständig erlernbar!"
Dieses Online-Tutorial ist für alle Neueinsteiger und Hobby-Makro-Schreiber gedacht, die sich von
Grund auf die Technik der Programmierung aneignen möchten, um professionelle Makros im
Büro-Alltag erstellen zu können. Aus diesem Grund sind einige Fachbegriffe bewusst erheblich einfacher
erklärt, so dass Sie auch als nicht Informatiker mit den Begrifflichkeiten arbeiten können.
Für Profis ist dieses Tutorial nicht geeignet, da lediglich Grundlagenwissen vermittelt wird.
Wie bei einem Hausbau benötigen wir ein gutes Fundament, damit unser Haus auch
sicher und lange steht. Genauso verhält es sich mit einem Wissensfundament der
Programmierung, wenn man gute Programme und Makros erstellen möchte.
Genau dieses Fundament werden wir zusammen herstellen. Das eigentliche Haus, sprich Ihre
Makros und Programme, können Sie später problemlos selbst erstellen und ausbauen.
Das gesamte Wissen für die Entwicklung eigener Programme und Makros wird in diesem Tutorial besprochen.
Der Vorteil einer verstandenen und gut durchgesprochenen Programmierbasis ist, dass Sie sich jederzeit im Internet auf die Suche nach spezifischen Befehlen oder Ideen machen können. Durch die breite Grundlage werden Sie fremde Programme und Makros problemlos verstehen können und sich somit überall neues Wissen selbstständig aneignen können.
Kommen wir nun zu den eigentlichen Inhalten.
Wie immer im Bereich der Computer gibt es Voraussetzungen, die erfüllt sein müssen,
damit das in diesem Tutorial vermittelte Wissen auch angewendet werden kann. Diese Voraussetzungen werden wir zuerst besprechen.
Anschließend werden wir uns mit einer breiten Wissensgrundlage über die Programmierung beschäftigen.
Alle weiteren Kapitel sind anschließend modular aufgebaut. Jedes Kapitel setzt auf unserem Fundament auf und erweitert unsere Möglichkeiten. Alle Module / Kapitel können miteinander kombiniert werden. Somit eröffnen sich immer wieder neue Möglichkeiten und Anwendungsgebiete für Ihre Makros und Programme.
Wie immer macht die Übung den Meister. Ich versuche, Ihnen so viele Übungsmöglichkeiten wie möglich an die Hand zu geben. Allerdings lernt man am besten mit eigenen Ideen, die man in die Tat umsetzt.
Anstatt anzunehmen, unsere Aufgabe sei es dem Computer zu lehren, was er zu tun hat, sollten wir uns lieber darauf konzentrieren, dem Menschen zu erklären, was wir vom Computer wollen.
Sub HalloWelt()
'Kommentarzeilen werden mit einem führenden ' begonnen.
MsgBox "Hallo Welt!"
End Sub
Datentypname | Bedeutung | Wertebereich | Speicherbedarf (in Bytes) |
---|---|---|---|
Byte | Ganzzahl | 0 bis 255 Beispiel: 177 |
1 |
Boolean (!) | Boolescher Wert | True, False (Ja, Nein) Beispiel: True |
2 |
Integer (!) | Ganzzahl | -32768 bis 32767 Beispiel: -2755 |
2 |
Long (!) | Ganzzahl | Ca. -2 bis +2 Milliarden Beispiel: 379999 |
4 |
Single | Kommazahl | Beispiel: 31,99 | 4 |
Double (!) | Kommazahl | Beispiel: 31,999998 | 8 |
Currency | Währung | 8 | |
Date | Datum | 01.01.100 bis 31.12.9999 | 8 |
String (!) | Zeichenketten / Text | Text und Zeichen jeglicher Art. Beispiel: "ABC/123!" |
8 + Anzahl Zeichen |
Variant | Dynamischer Datentyp | Passt sich den Informationen automatisch an. | >= 16 |
Object (!) | Datentyp für Objekte | Passt sich der Größe des Objektes an. | Je nach Objekt |
Datentyp | Präfix-Vorschläge | Beispiel Namen - individuelle Notation | Beispiel Namen - ungarische Notation |
---|---|---|---|
Integer | i oder int | iAnzahl, iEingabeZahl | intAnzahl, intEingabeZahl |
Long | l oder lng | lZeilenNummer, lAnzahlDateien | lngZeilenNummer, lngAnzahlDateien |
Double | d oder dbl | dRechnungsbetrag, dBruchzahl | dblRechnungsbetrag, dblBruchzahl |
String | s oder str | sBenutzerEingabe, sMeinBerichtsText | strBenutzerEingabe, strMeinBerichtsText |
Boolean | b oder bln | bSpeichern, bFehlerGefunden | blnSpeichern, blnFehlerGefunden |
Object | o oder obj | oExcelDatei, oArbeitsblatt | objExcelDatei, objArbeitsblatt |
Option Explicit
Sub ArbeitenMitVariablenUndKonstanten()
'Deklaration von Variablen
Dim iZahl As Integer
Dim bAntwort As Boolean
Dim sText As String
'Deklaration von Konstanten
Const iMWST As Integer = 19
Const dFAKTOR As Double = 0.5
'Verwendung von Variablen und Konstanten
iZahl = 5
iZahl = iZahl + dFAKTOR 'Achtung bei verschiedenen Datentypen
iZahl = iMWST
bAntwort = True
bAntwort = False
sText = “Hallo, ich bin ein Satz in einer Variablen.“
sText = “Hallo,“ & “mit einem kaufmännischen & kann“ & _
“ ich Texte miteinander verknüpfen!“
'Ausgabe von Variableninahlten
MsgBox iZahl
MsgBox sText
End Sub
Option Explicit
Sub IchTesteEineMessageBox()
Dim sAusgabetext As String
sAusgabetext = "Hallo, ich bin die Zeichenkette, die der Programmierer ausgeben möchte!"
MsgBox sAusgabetext
End Sub
Option Explicit
Sub NunTestenWirEinUndAusgabe()
Dim sEingabeText As String
sEingabeText = Inputbox("Bitte geben Sie etwas Text ein:")
MsgBox sEingabeText
End Sub
Option Explicit
Sub DieErsteAufgabe()
'Variablen fuer die Eingabe des Benutzers
Dim lEingabeZahl1 As Long
Dim lEingabeZahl2 As Long
Dim lEingabeZahl3 As Long
'Eine Variable um das Ergebnis zu speichern
Dim lErgebnis As Long
'Abfrage der 3 Ganzzahlen vom Benutzer
lEingabeZahl1 = Inputbox("Bitte geben Sie die erste Ganzzahl ein:")
lEingabeZahl2 = Inputbox("Bitte geben Sie die zweite Ganzzahl ein:")
lEingabeZahl3 = Inputbox("Bitte geben Sie die dritte und letzte Ganzzahl ein:")
'Die Berechnung
lErgebnis = lEingabeZahl1 + lEingabeZahl2 + lEingabeZahl3
'Das Ergebnis dem Benutzer anzeigen
MsgBox "Das Ergebnis der Addition lautet: " & lErgebnis
End Sub
Option Explicit
Sub MeineErsteSequenz()
'Variablen anlegen
Dim sEingabeName As String
Dim iGanzeZahl As Integer
'Namen abfragen
sEingabeName = InputBox(“Bitte geben Sie Ihren Namen ein:“)
'Begruessung
MsgBox “Hallo “ & sEingabeName
'Rechnen
iGanzeZahl = 4
iGanzeZahl = iGanzeZahl + 2
'Ergebnis ausgeben
MsgBox “Die Ganze Zahl hat den Wert: “ & iGanzeZahl
End Sub
SYNTAX:
If <Bedingung> Then
'Dieser Teil wird ausgeführt
wenn die Bedingung erfüllt ist.
[Else
'Dieser Teil wird ausgeführt wenn
die Bedingung nicht erfüllt ist.
Man kann den ELSE Zweig jedoch auch weglassen, dieser ist optional.]
End If
Sub EinfacheSelektion()
Dim sEingabeAnrede As String
Dim sEingabeName As String
sEingabeAnrede = InputBox("Bitte geben Sie Ihre Anrede ein (Herr oder Frau):"
sEingabeName = InputBox("Bitte geben Sie Ihren Namen ein:"
If sEingabeAnrede = "Herr" Then
MsgBox "Hallo Herr " & sEingabeName
Else
MsgBox "Hallo Frau " & sEingabeName
End If
End Sub
If <Bedingung>
Then <Befehl1> :
<Befehl2> :
<Befehl3> 'Bitte nicht verwenden :)
SYNTAX:
Select Case <Variable>
Case <Variableninhalt1>
'Dieser Teil wird ausgeführt wenn Variableninhalt1 vorliegt.
Case <Variableninhalt2>
'Dieser Teil wird ausgeführt wenn Variableninhalt2 vorliegt.
[Case Else
'Dieser Teil wird ausgeführt wenn keiner der anderen Cases dem Inhalt entspricht.]
End Select
Sub KomplexeSelektion()
Dim sAmpelfarbe As String
sAmpelfarbe = InputBox("Bitte geben Sie eine Ampelfarbe ein (z.B. Rot oder Gelb):"
Select Case sAmpelfarbe
Case "Rot"
MsgBox "Die Ampel ist rot! Bitte warten!"
Case "Gelb"
MsgBox "Die Ampel wird gleich rot - Achtung!"
Case "RotGelb"
MsgBox "Die Ampel wird gleich grün..."
Case "Grün"
MsgBox "Die Ampel ist grün - Abfahrt!"
Case Else
MsgBox "Die Ampel ist leider defekt!"
End Select
End Sub
SYNTAX:
For <Zählvariable> =
<Startwert> To
<Endwert> [Step
<Schrittweite>]
'Der Inhalt wird so oft ausgeführt bis der Endwert erreicht ist.
'Wird Step verwendet, kann man die Schrittweite individuell einstellen.
Next <Zählvariable>
Sub ZaehlschleifenBeispiele()
Dim iZaehler As Integer
'Beispiel 1 "vorwaerts zaehlen":
For iZaehler = 1 To 10
Step 1
MsgBox "Jetzt ist der Inhalt der Zählvariablen: " & iZaehler
Next iZaehler
'Beispiel 2 "rueckwaerts zaehlen":
For iZaehler = 10 To 1
Step -1
MsgBox "Jetzt ist der Inhalt der Zählvariablen: " & iZaehler
Next iZaehler
End Sub
SYNTAX:
Do While <Bedingung>
'Der Inhalt wird so oft ausgeführt bis die Bedingung nicht mehr erfüllt ist.
'Ganz wichtig: Die zaehlende Variable muss vom Programmierer erhoeht werden!
Loop
Sub BedingteSchleifeBeispiel()
Dim iZaehler As Integer
'Manuell den Startwert setzen
iZaehler = 1
Do While iZaehler <= 10
MsgBox "Jetzt ist der Inhalt der Zählvariablen: " & iZaehler
'Achtung: iZaehler manuell erhoehen!
iZaehler = iZaehler + 1
Loop
End Sub
Sub Hauptprogramm()
Call Unterprogramm1
Call Unterprogramm2
End Sub
Sub Unterprogramm1()
MsgBox "Diese Meldung kommt aus dem Unterprogramm1!"
End Sub
Sub Unterprogramm2()
MsgBox "Diese Meldung kommt aus dem Unterprogramm2!"
End Sub
Option Explicit
'Aufgabe 1: Sequenz
Sub Aufgabe_Sequenz_EVA()
'Variablen
Dim sName As String
Dim iZahl As Integer
Dim iZahlp10 As Integer
Dim iZahlp20 As Integer
'Konstanten
Const ADDITION1 As Integer = 10
'Eingabe
sName = InputBox("Wie ist Dein Name?")
iZahl = InputBox("Wie alt bist Du?")
'Verarbeitung
iZahlp10 = iZahl + ADDITION1
iZahlp20 = iZahl + 20
'Ausgabe - Hinweis: vbCrLf bedeutet einen Zeilenumbruch (Return)
MsgBox "Hallo " & sName & vbCrLf & "Du bist jetzt: " & iZahl & vbCrLf & _
"Du bist in " & ADDITION1 & " Jahren: " & iZahl + 10 & vbCrLf & _
"Du bist in 20 Jahren: " & iZahlp20
End Sub
'Aufgabe 2: Alternative - 1. Variante
Sub Aufgabe_Alternative_Variante_1()
Dim iZahl As Integer
iZahl = InputBox("Bitte eine Zahl eingeben:")
If iZahl >= 0 Then
'positive Zahl
MsgBox "Die Zahl ist positiv!"
End If
If iZahl < 0 Then
'negative Zahl
MsgBox "Die Zahl ist negativ!"
End If
End Sub
'Aufgabe 2: Alternative - 2. Variante
Sub Aufgabe_Alternative_Variante_2()
Dim iZahl As Integer
iZahl = InputBox("Bitte eine Zahl eingeben:")
If iZahl >= 0 Then
'positive Zahl
MsgBox "Die Zahl ist positiv!"
Else
'negative Zahl
MsgBox "Die Zahl ist negativ!"
End If
End Sub
'Aufgabe 3a: Iteration - Zaehlschleife
Sub Aufgabe_Zaehlschleife()
Dim iZaehler As Integer
For iZaehler = 1 To 1000 'Step 1
Debug.Print iZaehler
Next iZaehler
End Sub
'Aufgabe 3b: Iteration - Bedingungsschleife
Sub Aufgabe_Bedingungsschleife()
Dim iZahl As Integer
'Faktor festlegen
Const iFAKTOR As Integer = 2
'Benutzerabfrage einer Zahl
iZahl = InputBox("Bitte eine Zahl eingeben:")
'Solange Eingabe mit Faktor multiplizieren bis <= 200 ueberschritten ist
Do While iZahl <= 200
iZahl = iZahl * iFAKTOR
'Ausgabe im Direktfenster jeder einzelnen Multiplikation
Debug.Print "Zwischenergebnis: " & iZahl
Loop
'Endergebnis an Benutzer ausgeben
MsgBox "Das Ergebnis ist: " & iZahl
End Sub
'Aufgabe 4: Aufruf aller Prozeduren
Sub Aufgabe_AufrufAllerProzeduren()
Call Aufgabe_Sequenz_EVA
Call Aufgabe_Alternative_Variante_1
Call Aufgabe_Alternative_Variante_2
Call Aufgabe_Zaehlschleife
Call Aufgabe_Bedingungsschleife
End Sub