Alte VBA-Programmierung ohne Standards – Warum alter VBA-Code problematisch wird – und wie ich Code modernisiere

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

ProblemBeispiel
Globale Variablen ĂŒberallPublic Kunde As String
Kein Option ExplicitVariablen entstehen versehentlich
GoTo statt If
ElseSpaghetticode
Alles in Form_Load gepacktKeine Trennung von Logik und OberflÀche
Duplikat-LogikDieselbe 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.

Kategorien:

Schlagwörter: