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:
mdlKundenLogik
mdlDatenzugriff
mdlFehlerbehandlung
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.
Keine Antworten