lerneinheit 3: vba teil 1:...
TRANSCRIPT
Seite 2
VBA – Was ist das? • Visual Basic: Programmiersprache von Microsoft • Applications: Programme der Office-Familie (z.B. Excel, Word,…) VBA: Programmierung unter Office
VBA
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
Ausgabekanäle: • Meldungsfenster • Zellen • Direktbereich Eingabekanäle: • Zellen • Meldungsfenster (Betätigung der Schaltflächen) • Formulare
VBA
Seite 4
Ü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.
VBA
Seite 5
Übungsaufgabe 2: Anhand des in Zelle B1 eingetragenen Integerwerts soll ein Countdown auf den Direktbereich ausgegeben werden
VBA
Seite 6
Übungsaufgabe 3: Was macht die nachfolgende VBA-Sub bei der Ausführung in den einzelnen Zeilen des Quellcodes und was berechnet sie allgemein?
VBA
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
Übungsaufgabe 3: Was macht die nachfolgende VBA-Sub bei der Ausführung in den einzelnen Zeilen des Quellcodes und was berechnet sie allgemein?
VBA
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
Übungsaufgabe 3: Was macht die nachfolgende VBA-Sub bei der Ausführung in den einzelnen Zeilen des Quellcodes und was berechnet sie allgemein?
VBA
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!
Seite 10
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
While vs.
Schleifen in VBA
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
2.) Mit Zelle als Anker
'A1
g = Range("A1").Value
'A2
g = g + Range("A1").Offset(1, 0).Value
'A3
g = g + Range("A1").Offset(2, 0).Value
'...
1.) Zellaktivierung
'A1 Range("A1").Activate g = ActiveCell.Value 'A2 ActiveCell.Offset(1, 0).Activate g = g + ActiveCell.Value 'A3 ActiveCell.Offset(1, 0).Activate g = g + ActiveCell.Value '...
Offset(Zeilen-Offset, Spalten-Offset)
Navigation durch das Tabellenblatt ges: Gesamtsumme
der Zellen A1, A2, A3…
While ActiveCell.Value <> ““
g = g + ActiveCell.Value
ActiveCell.Offset(1, 0).Activate
Wend
'Startaktivierung setzen
Range("A1").Activate
i = 0
While Range(“A1“).Offset(i, 0).Value <> ““
g = g + Range(“A1“).Offset(i, 0).Value
i = i + 1
Wend
Seite 12
2.) Mit Zelle als Anker
1.) Mit Zellaktivierung 'Startaktivierung setzen Range("A1").Activate
Offset(Zeilen-Offset, Spalten-Offset)
Navigation durch das Tabellenblatt ges: Gesamtsumme der
Zellen A1 bis A3
For i = 1 To 3
g = g + ActiveCell.Value
ActiveCell.Offset(1, 0).Activate
Next i
For i = 0 To 2
g = g + Range(“A1“).Offset(i, 0).Value
Next i
Seite 13
2.) Mit Zelle als Anker
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
Offset(Zeilen-Offset, Spalten-Offset)-Zusammenfassung
Navigation durch das Tabellenblatt
For i = 0 To 2
g = g + Range(“A1“).Offset(i, 0).Value
Next i
i = 0
While Range(“A1“).Offset(i, 0).Value <> ““
g = g + Range(“A1“).Offset(i, 0).Value
i = i + 1
Wend
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
Range(…).Interior.Color = 255