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:

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert