Writing Your First VBA Procedure
Swipe um das Menü anzuzeigen
Das Aufzeichnen von Makros vermittelt den Wortschatz; das Schreiben eines Makros von Grund auf ist der Einstieg ins Programmierdenken.
Der Aufbau einer Sub-Prozedur
Jeder wiederverwendbare VBA-Codeblock, der eine Aktion ausführt (im Gegensatz zu einer Funktion, die einen Wert zurückgibt), wird als Sub geschrieben:
Sub ProcedureName()
' instructions go here
End Sub
Mit dem Cursor irgendwo innerhalb einer Sub drücken Sie F5 (oder klicken Sie auf den grünen Ausführen-Pfeil), um sie auszuführen. Kommentare — jede Zeile, die mit einem Apostroph (') beginnt — werden von VBA vollständig ignoriert; verwenden Sie sie großzügig, um zu erklären, warum der Code etwas tut, nicht nur was er tut, da das Was meist schon aus dem Code ersichtlich ist.
Formatierungsgewohnheiten, die sich sofort auszahlen
- Geben Sie
Option Explicitganz oben in jedem Modul ein — dies zwingt Sie, jede Variable zu deklarieren, wodurch Tippfehler erkannt werden, bevor sie zu Fehlern werden; - Code innerhalb von Schleifen und
If-Blöcken um eine Tab-Stufe einrücken — der VBE erzwingt dies nicht, aber nicht eingerückter Code wird schnell unleserlich; - Verwenden Sie beschreibende Namen (
HighEarnerCountstattx) — Sie werden es sich in drei Wochen danken.
Durchgearbeitetes Beispiel: Hervorheben von Vielverdienern
Wir schreiben von Hand eine Prozedur, die jede Mitarbeiterzeile in der Tabelle durchgeht und alle markiert, die mehr als $55,000 verdienen — etwas, das der Makrorekorder nie könnte, da hierfür eine Entscheidung (eine If-Anweisung) für jede Zeile (eine Schleife) erforderlich ist.
Option Explicit
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
Dim ws As Worksheet / Dim i As Long— diese deklarieren zwei Variablen:wshält einen Verweis auf das Employees sheet, undizählt die Zeilen durch;- Set
ws = ThisWorkbook.Worksheets("Employees")— dies ist die Objektmodell-Gewohnheit: das Blatt explizit benennen, anstatt sich auf das gerade aktive zu verlassen; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row— eine Standardformulierung, die die letzte verwendete Zeile in SpalteAfindet, unabhängig davon, wie viele Mitarbeiter in der Tabelle stehen;For i = 2 To lastRow ... Next i— eine Schleife, die den Code für jede Datenzeile einmal wiederholt, beginnend bei Zeile 2, um die Kopfzeile zu überspringen;- If
ws.Cells(i, 6).Value > 55000 Then— eine Entscheidung: Nur Zeilen, bei denen die Gehaltsspalte (Spalte 6) 55000 übersteigt, werden formatiert; MsgBox— ein einfaches Pop-up zur Bestätigung, dass das Makro abgeschlossen ist.
Geben Sie dieses Verfahren in modIntro ein, platzieren Sie den Cursor darin und drücken Sie F5. Überprüfen Sie die Zahlen selbst — Emma Davis und Olivia Brown sind die beiden Mitarbeitenden, die im Beispieltabelle mehr als $55.000 verdienen.
Aufgabe
- Geben Sie
HighlightTopEarnersexakt wie gezeigt in modIntro ein und führen Sie es aus. Bestätigen Sie, dass zwei Zeilen grün werden. - Duplizieren Sie das Verfahren als
HighlightITDepartmentund ändern Sie die Bedingung so, dass jede Zeile hervorgehoben wird, in der die Abteilung (Spalte 3) "IT" entspricht, anstatt das Gehalt zu prüfen. - Fügen Sie über jedem Verfahren einen Kommentar hinzu, der in einem Satz erklärt, was es macht — üben Sie, Kommentare für die Lesenden zu schreiben, nicht für sich selbst.
- Speichern Sie die Arbeitsmappe erneut (sie ist weiterhin
.xlsm, daher reicht ein normalesCtrl+S).
- Markieren Sie das gesamte
HighlightTopEarners-Verfahren (vonSubbisEnd Sub), kopieren Sie es und fügen Sie es direkt darunter inmodIntroein. - Benennen Sie die zweite Kopie in der
Sub-Zeile zuSub HighlightITDepartment()um — jedes Verfahren in einem Modul benötigt einen eindeutigen Namen, sonst weiß VBA nicht, welches Sie ausführen möchten. - Die zu ändernde Bedingung ist die
If-Zeile. Momentan prüft sie eine Zahl:
If ws.Cells(i, 6).Value > 55000 Then
Sie müssen stattdessen Text prüfen — Spalte 3 (Abteilung) entspricht "IT". Denken Sie daran, dass bei Textvergleichen Anführungszeichen um den Vergleichswert stehen müssen und = statt > verwendet wird.
4. Alles andere innerhalb der Schleife (die Interior.Color-Zeile, die Schleifenstruktur selbst) kann gleich bleiben — nur die geprüfte Bedingung ändert sich.
Kommentare hinzufügen
- Eine Kommentarzeile beginnt mit einem Apostroph (
') und steht direkt über derSub-Zeile — nicht innerhalb des Verfahrens. - Schreiben Sie den Kommentar so, als würden Sie das Makro einer Kollegin oder einem Kollegen erklären, die/der es noch nie gesehen hat, nicht als Erinnerung für sich selbst. Vergleichen Sie:
- Weniger hilfreich:
' durchläuft Zeilen(beschreibt das Wie, was der Code bereits zeigt) - Hilfreicher:
' Hebt Mitarbeitende hervor, die mehr als $55.000 verdienen(beschreibt das Ergebnis, was nicht auf den ersten Blick ersichtlich ist)
- Weniger hilfreich:
- Machen Sie das Gleiche für das zweite Verfahren — ein Satz, der beschreibt, was es hervorhebt und warum, bezogen auf den geschäftlichen Zweck (IT-Abteilung), nicht auf die Mechanik der Schleife.
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 3).Value = "IT" Then
ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — IT department is highlighted."
End Sub
Geben Sie beide Verfahren in modIntro ein, führen Sie zuerst HighlightTopEarners aus und bestätigen Sie, dass genau zwei Zeilen grün werden (Emma Davis mit $62.000 und Sophia Miller mit $59.000 — die anderen drei liegen bei oder unter $55.000), führen Sie dann HighlightITDepartment aus und bestätigen Sie, dass stattdessen die Zeile von Sophia Miller hervorgehoben wird. Speichern Sie mit Strg+S, sobald beide funktionieren.
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Writing Your First VBA Procedure
Das Aufzeichnen von Makros vermittelt den Wortschatz; das Schreiben eines Makros von Grund auf ist der Einstieg ins Programmierdenken.
Der Aufbau einer Sub-Prozedur
Jeder wiederverwendbare VBA-Codeblock, der eine Aktion ausführt (im Gegensatz zu einer Funktion, die einen Wert zurückgibt), wird als Sub geschrieben:
Sub ProcedureName()
' instructions go here
End Sub
Mit dem Cursor irgendwo innerhalb einer Sub drücken Sie F5 (oder klicken Sie auf den grünen Ausführen-Pfeil), um sie auszuführen. Kommentare — jede Zeile, die mit einem Apostroph (') beginnt — werden von VBA vollständig ignoriert; verwenden Sie sie großzügig, um zu erklären, warum der Code etwas tut, nicht nur was er tut, da das Was meist schon aus dem Code ersichtlich ist.
Formatierungsgewohnheiten, die sich sofort auszahlen
- Geben Sie
Option Explicitganz oben in jedem Modul ein — dies zwingt Sie, jede Variable zu deklarieren, wodurch Tippfehler erkannt werden, bevor sie zu Fehlern werden; - Code innerhalb von Schleifen und
If-Blöcken um eine Tab-Stufe einrücken — der VBE erzwingt dies nicht, aber nicht eingerückter Code wird schnell unleserlich; - Verwenden Sie beschreibende Namen (
HighEarnerCountstattx) — Sie werden es sich in drei Wochen danken.
Durchgearbeitetes Beispiel: Hervorheben von Vielverdienern
Wir schreiben von Hand eine Prozedur, die jede Mitarbeiterzeile in der Tabelle durchgeht und alle markiert, die mehr als $55,000 verdienen — etwas, das der Makrorekorder nie könnte, da hierfür eine Entscheidung (eine If-Anweisung) für jede Zeile (eine Schleife) erforderlich ist.
Option Explicit
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
Dim ws As Worksheet / Dim i As Long— diese deklarieren zwei Variablen:wshält einen Verweis auf das Employees sheet, undizählt die Zeilen durch;- Set
ws = ThisWorkbook.Worksheets("Employees")— dies ist die Objektmodell-Gewohnheit: das Blatt explizit benennen, anstatt sich auf das gerade aktive zu verlassen; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row— eine Standardformulierung, die die letzte verwendete Zeile in SpalteAfindet, unabhängig davon, wie viele Mitarbeiter in der Tabelle stehen;For i = 2 To lastRow ... Next i— eine Schleife, die den Code für jede Datenzeile einmal wiederholt, beginnend bei Zeile 2, um die Kopfzeile zu überspringen;- If
ws.Cells(i, 6).Value > 55000 Then— eine Entscheidung: Nur Zeilen, bei denen die Gehaltsspalte (Spalte 6) 55000 übersteigt, werden formatiert; MsgBox— ein einfaches Pop-up zur Bestätigung, dass das Makro abgeschlossen ist.
Geben Sie dieses Verfahren in modIntro ein, platzieren Sie den Cursor darin und drücken Sie F5. Überprüfen Sie die Zahlen selbst — Emma Davis und Olivia Brown sind die beiden Mitarbeitenden, die im Beispieltabelle mehr als $55.000 verdienen.
Aufgabe
- Geben Sie
HighlightTopEarnersexakt wie gezeigt in modIntro ein und führen Sie es aus. Bestätigen Sie, dass zwei Zeilen grün werden. - Duplizieren Sie das Verfahren als
HighlightITDepartmentund ändern Sie die Bedingung so, dass jede Zeile hervorgehoben wird, in der die Abteilung (Spalte 3) "IT" entspricht, anstatt das Gehalt zu prüfen. - Fügen Sie über jedem Verfahren einen Kommentar hinzu, der in einem Satz erklärt, was es macht — üben Sie, Kommentare für die Lesenden zu schreiben, nicht für sich selbst.
- Speichern Sie die Arbeitsmappe erneut (sie ist weiterhin
.xlsm, daher reicht ein normalesCtrl+S).
- Markieren Sie das gesamte
HighlightTopEarners-Verfahren (vonSubbisEnd Sub), kopieren Sie es und fügen Sie es direkt darunter inmodIntroein. - Benennen Sie die zweite Kopie in der
Sub-Zeile zuSub HighlightITDepartment()um — jedes Verfahren in einem Modul benötigt einen eindeutigen Namen, sonst weiß VBA nicht, welches Sie ausführen möchten. - Die zu ändernde Bedingung ist die
If-Zeile. Momentan prüft sie eine Zahl:
If ws.Cells(i, 6).Value > 55000 Then
Sie müssen stattdessen Text prüfen — Spalte 3 (Abteilung) entspricht "IT". Denken Sie daran, dass bei Textvergleichen Anführungszeichen um den Vergleichswert stehen müssen und = statt > verwendet wird.
4. Alles andere innerhalb der Schleife (die Interior.Color-Zeile, die Schleifenstruktur selbst) kann gleich bleiben — nur die geprüfte Bedingung ändert sich.
Kommentare hinzufügen
- Eine Kommentarzeile beginnt mit einem Apostroph (
') und steht direkt über derSub-Zeile — nicht innerhalb des Verfahrens. - Schreiben Sie den Kommentar so, als würden Sie das Makro einer Kollegin oder einem Kollegen erklären, die/der es noch nie gesehen hat, nicht als Erinnerung für sich selbst. Vergleichen Sie:
- Weniger hilfreich:
' durchläuft Zeilen(beschreibt das Wie, was der Code bereits zeigt) - Hilfreicher:
' Hebt Mitarbeitende hervor, die mehr als $55.000 verdienen(beschreibt das Ergebnis, was nicht auf den ersten Blick ersichtlich ist)
- Weniger hilfreich:
- Machen Sie das Gleiche für das zweite Verfahren — ein Satz, der beschreibt, was es hervorhebt und warum, bezogen auf den geschäftlichen Zweck (IT-Abteilung), nicht auf die Mechanik der Schleife.
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 3).Value = "IT" Then
ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — IT department is highlighted."
End Sub
Geben Sie beide Verfahren in modIntro ein, führen Sie zuerst HighlightTopEarners aus und bestätigen Sie, dass genau zwei Zeilen grün werden (Emma Davis mit $62.000 und Sophia Miller mit $59.000 — die anderen drei liegen bei oder unter $55.000), führen Sie dann HighlightITDepartment aus und bestätigen Sie, dass stattdessen die Zeile von Sophia Miller hervorgehoben wird. Speichern Sie mit Strg+S, sobald beide funktionieren.
Danke für Ihr Feedback!