Lerneinheit 3: VBA Teil 1: Eingabe/Ausgabe

Lerneinheit 3: VBA
Teil 1: Eingabe/Ausgabe
Michaela Weiss | 30. März 2015
Seite 2
VBA
VBA – Was ist das?
• Visual Basic: Programmiersprache von Microsoft
• Applications: Programme der Office-Familie (z.B. Excel, Word,…)
 VBA: Programmierung unter Office
Nützliches Wissen:
• VBA-Programme (Makros) hängen stets an Office-Dokumenten
• Office-Dokumente, die Makros enthalten, werden durch ein „m“ in der
Dateiendung gekennzeichnet (*.xlsm, *.docm,…)
• Makros können nur innerhalb des zugehörigen Dokuments verwendet
werden
• Entwicklungsumgebung: IDE
 muss ins Menüband eingefügt werden
• Wechseln in die IDE:
 Über das Menüband
 Alt + F11
Seite 3
VBA
Ausgabekanäle:
• Meldungsfenster
• Zellen
• Direktbereich
Eingabekanäle:
• Zellen
• Meldungsfenster (Betätigung der Schaltflächen)
• Formulare
Seite 4
VBA
Übungsaufgabe 1:
In B1 und B2 werden die ganzzahlige Werte A und B eingetragen.
Die Sub soll überprüfen, ob B ein Teiler von A ist und das Ergebnis als
Meldungsfenster ausgeben.
Ist mindestens eine der Zahlen kleiner oder gleich null, soll eine
Fehlermeldung auf der Direktausgabe erzeugt werden und die Sub sofort
beendet werden. Die Sub soll über eine Schaltfläche aufrufbar sein.
Seite 5
VBA
Übungsaufgabe 2:
Anhand des in Zelle B1 eingetragenen Integerwerts soll ein Countdown auf
den Direktbereich ausgegeben werden
Seite 6
VBA
Übungsaufgabe 3:
Was macht die nachfolgende VBA-Sub bei der Ausführung in den einzelnen
Zeilen des Quellcodes und was berechnet sie allgemein?
Public Sub TuWas()
Dim x As Integer, erg As Integer
x = Range("A1").Value
erg = 1
If (x < 0) Then
Exit Sub
End If
While (x > 0)
erg = erg * x
x=x–1
Wend
MsgBox "Das Ergebnis ist: " & erg
End Sub
Seite 7
VBA
Übungsaufgabe 3:
Was macht die nachfolgende VBA-Sub bei der Ausführung in den einzelnen
Zeilen des Quellcodes und was berechnet sie allgemein?
Public Sub TuWas()
Dim x As Integer, erg As Integer ‘dimensioniert zwei ganzzahlige Variablen
x = Range("A1").Value ‘belegt die Varialbe x mit dem Wert aus Zelle A1
erg = 1 ‘belegt die Varialbe erg mit dem Wert 1
If (x < 0) Then ‘prüft ob x < 0 ist
Exit Sub ‘beendet Sub
End If
While (x > 0) ‘läuft solange der Wert der Variablen x größer 0 ist
erg = erg * x ‘verändert den Wert der Variablen erg
x = x – 1 ‘erniedrigt den Wert der Variablen x
Wend
MsgBox "Das Ergebnis ist: " & erg ‘Meldungsfenster
End Sub
Seite 8
VBA
Übungsaufgabe 3:
Was macht die nachfolgende VBA-Sub bei der Ausführung in den einzelnen
Zeilen des Quellcodes und was berechnet sie allgemein?
Public Sub TuWas()
Dim x As Integer, erg As Integer
x = Range("A1").Value
erg = 1
If (x < 0) Then
Exit Sub
End If
While (x > 0)
erg = erg * x
x=x–1
Wend
MsgBox "Das Ergebnis ist: " & erg
End Sub
Berechnet die
Fakultät!
Michaela Weiss | 30. März 2015
Lerneinheit 3: VBA
Teil 2: (Mit Schleifen)
Durch das Tabellenblatt
Seite 10
Schleifen in VBA
While
vs.
While Bedingung
Anweisungsblock
[Index hochzählen]
Wend
Ablauf:
• Schleife läuft, solange
Bedingung erfüllt
• Falls Index verwendet wird,
muss dieser manuell erhöht
werden (sonst Endlosschleife)
Anwendung:
• Wenn Anzahl der
Schleifendurchläufe nicht
bekannt
 VBA:
Durch alle gefüllten Zellen
laufen
For
For index = start To ende [Step s]
Anweisungsblock
Next index
Ablauf:
• Schleife läuft x Mal
• Index wird durch Next index [und
ggf. step] automatisch erhöht
Anwendung:
• Wenn Anzahl der
Schleifendurchläufe bekannt
 VBA:
Durch x Zellen laufen
(z.B. Monatsverkaufszahlen eines
kompletten Jahres)
Seite 11
Navigation durch das Tabellenblatt
ges: Gesamtsumme
der Zellen A1, A2, A3…
Offset(Zeilen-Offset, Spalten-Offset)
1.) Zellaktivierung
2.) Mit Zelle als Anker
'A1
Range("A1").Activate
g = ActiveCell.Value
'A1
g = Range("A1").Value
'A2
ActiveCell.Offset(1, 0).Activate
g = g + ActiveCell.Value
'A3
ActiveCell.Offset(1, 0).Activate
g = g + ActiveCell.Value
'A2
g = g + Range("A1").Offset(1, 0).Value
'A3
g = g + Range("A1").Offset(2, 0).Value
'...
'...
'Startaktivierung setzen
Range("A1").Activate
While ActiveCell.Value <> ““
g = g + ActiveCell.Value
ActiveCell.Offset(1, 0).Activate
Wend
i=0
While Range(“A1“).Offset(i, 0).Value <> ““
g = g + Range(“A1“).Offset(i, 0).Value
i=i+1
Wend
Seite 12
Navigation durch das Tabellenblatt
ges: Gesamtsumme der
Zellen A1 bis A3
Offset(Zeilen-Offset, Spalten-Offset)
1.) Mit Zellaktivierung
'Startaktivierung setzen
Range("A1").Activate
For i = 1 To 3
g = g + ActiveCell.Value
ActiveCell.Offset(1, 0).Activate
Next i
2.) Mit Zelle als Anker
For i = 0 To 2
g = g + Range(“A1“).Offset(i, 0).Value
Next i
Seite 13
Navigation durch das Tabellenblatt
Offset(Zeilen-Offset, Spalten-Offset)-Zusammenfassung
1.) Mit Zellaktivierung
'Startaktivierung setzen
Range("A1").Activate
While ActiveCell.Value <> ““
g = g + ActiveCell.Value
ActiveCell.Offset(1, 0).Activate
Wend
'Startaktivierung setzen
Range("A1").Activate
For i = 1 To 3
g = g + ActiveCell.Value
ActiveCell.Offset(1, 0).Activate
Next i
2.) Mit Zelle als Anker
i=0
While Range(“A1“).Offset(i, 0).Value <> ““
g = g + Range(“A1“).Offset(i, 0).Value
i=i+1
Wend
For i = 0 To 2
g = g + Range(“A1“).Offset(i, 0).Value
Next i
Range(…).Interior.Color = 255
Aufgaben (immer von A1 aus):
1. Alle gefüllten Zellen der 1. Zeile durchlaufen und Summe berechnen
2. Alle 10 Zeilen der Spalte A durchlaufen und Summe berechnen
3. Alle gefüllten Zellen durchlaufen und Zahlen > 10 rot highlighten