Wenn der Code noch aus Windows XP stammt
Du kennst das.
Keiner weiĂ mehr, wer den Code geschrieben hat.
Kommentare fehlen.
Variablen heiĂen x, y, z.
Und wenn’s irgendwo kracht, hilft nur Beten oder Debuggen.
Alt heiĂt nicht automatisch schlecht.
Aber: Ohne Standards wird jeder Bug zur Zeitfalle.
Warum alter VBA-Code gefÀhrlich wird
- Niemand versteht die Logik auf Anhieb
- Fehler schleichen sich ein – und bleiben
- Ănderungen sind riskant
- Kein Debugging ohne Nebenwirkungen
- SicherheitslĂŒcken durch veraltete Techniken
Und: Du traust dem Code irgendwann selbst nicht mehr.
Typische Altlasten im VBA-Alltag
| Problem | Beispiel |
|---|---|
| Globale Variablen ĂŒberall | Public Kunde As String |
| Kein Option Explicit | Variablen entstehen versehentlich |
GoTo statt IfâŠElse | Spaghetticode |
Alles in Form_Load gepackt | Keine Trennung von Logik und OberflÀche |
| Duplikat-Logik | Dieselbe Berechnung an fĂŒnf Stellen |
| Kommentare? Keine Spur | „Funktioniert irgendwie“ |
Solcher Code funktioniert – bis Du ihn Ă€ndern musst.
So gehst Du modern und strukturiert ran
1. Immer mit Option Explicit starten
Erzwingt die Deklaration jeder Variablen.
Verhindert stille Tippfehler und Zufallsverhalten.
Beispiel:
Option Explicit
Dim Umsatz As Currency
Umsatz = Umsatz + 100 ' funktioniert nur mit korrekter Deklaration
2. Fehlerbehandlung konsequent einbauen
Alt:
On Error Resume Next
DoCmd.OpenForm "frmKunde"
Modern:
On Error GoTo Fehler
DoCmd.OpenForm "frmKunde"
Exit Sub
Fehler:
MsgBox "Fehler: " & Err.Number & vbCrLf & Err.Description, vbCritical
Fehler mĂŒssen sichtbar sein – nicht unterdrĂŒckt.
3. Logik in Funktionen auslagern
Vorher:
If txtPreis * txtMenge > 1000 Then
txtRabatt = 0.1
Else
txtRabatt = 0
End If
Nachher:
txtRabatt = BerechneRabatt(txtPreis, txtMenge)
Function BerechneRabatt(Preis As Currency, Menge As Integer) As Double
If Preis * Menge > 1000 Then
BerechneRabatt = 0.1
Else
BerechneRabatt = 0
End If
End Function
Ergebnis: Mehr Wiederverwendung, weniger Kopiererei.
4. Konstanten statt „magischer Werte“
Besser so:
Const MAX_RABATT As Double = 0.2
If Rabatt > MAX_RABATT Then
Rabatt = MAX_RABATT
End If
Sonst weiĂ in zwei Jahren keiner, warum „0.2“ dort steht.
5. Module strukturieren
- Jedes Modul hat ein Thema
- Funktionen nur, wenn sie wirklich gebraucht werden
- Kein Code direkt im Formular, wenn er auch in Modul passt
Strukturvorschlag:
mdlKundenLogikmdlDatenzugriffmdlFehlerbehandlung
So findest Du Dich wieder zurecht – auch nach 6 Monaten Pause.
6. Nach und nach automatisiert aufrÀumen
Nutze Tools wie MZ-Tools oder Rubberduck.
Sie finden unbenutzte Variablen, doppelte Prozeduren, fehlende Deklarationen.
Tipp: Starte mit der Funktion, die Du zuletzt anfassen musst.
Nie alles auf einmal – lieber systematisch modernisieren.
Mein persönlicher Klassiker: Refactoring einer Importprozedur
Vorher:
Sub Import()
Dim x, y
x = "C:\daten.csv"
DoCmd.TransferText acImportDelim, , "tblTemp", x
DoCmd.RunSQL "DELETE * FROM tblZiel"
DoCmd.RunSQL "INSERT INTO tblZiel SELECT * FROM tblTemp"
End Sub
Nachher:
Sub ImportiereCSV(Optional Pfad As String = "")
On Error GoTo Fehler
Dim Datei As String
Datei = IIf(Pfad = "", CurrentProject.Path & "\daten.csv", Pfad)
DoCmd.TransferText acImportDelim, , "tblTemp", Datei, True
CurrentDb.Execute "DELETE FROM tblZiel", dbFailOnError
CurrentDb.Execute "INSERT INTO tblZiel SELECT * FROM tblTemp", dbFailOnError
Exit Sub
Fehler:
MsgBox "Fehler beim Import: " & Err.Description, vbCritical
End Sub
Klingt banal. Macht aber den Unterschied zwischen Chaos und Wartbarkeit.
Mein Fazit
Alter VBA-Code ist wie ein altes Segelboot.
FĂ€hrt noch – aber wehe, Du willst wenden.
Mit klaren Regeln, Funktionen und Fehlerbehandlung kriegst Du wieder Kontrolle rein.
Und kannst die Anwendung weiterentwickeln, ohne schlaflose NĂ€chte.
Wenn Du magst, werf ich mit Dir zusammen einen Blick rein.
Ziel: Klare Struktur. Klare Logik. Klare Ansagen – norddeutsch eben.