Wenn der Code noch aus der Windows-98-Zeit stammt

VBA lÀuft.
Oft auch noch 20 Jahre spÀter.
Aber genau das ist das Problem.
Denn was lÀuft, wird nicht angefasst.
Und irgendwann fĂ€llt’s Dir auf die FĂŒĂŸe.

Ich zeig Dir, wo’s kritisch wird –
und wie ich alte VBA-Projekte modernisiere,
ohne gleich alles umzubauen.

Risiko 1: Veraltete API-Aufrufe

Alte Declare-Statements aus der 32-Bit-Zeit
bringen Dir unter 64-Bit Office direkt Fehler.

Beispiel (falsch unter 64-Bit)

Declare Function GetUserNameA Lib "advapi32.dll" (ByVal lpBuffer As String, nSize As Long) As Long

Korrekt mit 64-Bit-UnterstĂŒtzung

#If VBA7 Then
    Private Declare PtrSafe Function GetUserNameA Lib "advapi32.dll" (ByVal lpBuffer As String, ByRef nSize As Long) As Long
#Else
    Private Declare Function GetUserNameA Lib "advapi32.dll" (ByVal lpBuffer As String, ByRef nSize As Long) As Long
#End If

Funktioniert auf beiden Plattformen.
Aber nur, wenn Du es so schreibst.

Risiko 2: Fixed Strings und Variant-Spam

Klassiker aus Access 97-Zeiten:

Dim sText As String * 50
Dim Ergebnis

Problematisch fĂŒr Speicher, KompatibilitĂ€t und Performance.

Empfehlung

  • Keine Fixed-Length-Strings mehr
  • Typisieren: Dim Ergebnis As String

Risiko 3: Keine Fehlerbehandlung

Alte Projekte bestehen oft nur aus:

On Error Resume Next

Oder gar keinem Error-Handling.
Dann passiert beim Absturz – nichts.
Und Du suchst Stunden.

Besser:

On Error GoTo Fehler

' dein Code

Exit Sub

Fehler:
    MsgBox "Fehler: " & Err.Number & vbCrLf & Err.Description, vbCritical

Noch besser: Logging in Tabelle oder Datei.

Risiko 4: Zu viele globale Variablen

Public KundenID As Long

Klingt harmlos.
Aber wird schnell unĂŒbersichtlich.
Und bei gleichzeitiger Nutzung (Frontend + mehrere Nutzer): kritisch.

Empfehlung

  • Globale Variablen vermeiden
  • Stattdessen TempVars, Formulare oder Parameter verwenden
  • Oder Klassen nutzen

Risiko 5: Kein Unicode, kein UTF-8

Viele alte Projekte können kein Ă€, ö, ĂŒ
oder stolpern bei Exporten mit Umlauten.

Beispiel: Open ... For Output As #1

Lösung:

  • Bei Text-Export explizit Encoding angeben (z. B. mit ADODB.Stream)
  • Beim Speichern UTF-8 verwenden:
Sub ExportUTF8()
    Dim stream As Object
    Set stream = CreateObject("ADODB.Stream")
    stream.Charset = "utf-8"
    stream.Open
    stream.WriteText "MĂŒller & Söhne"
    stream.SaveToFile "C:\temp\export.txt", 2
    stream.Close
    Set stream = Nothing
End Sub

Risiko 6: Kein Versionsmanagement

Alte Projekte haben keinen Plan,
wer wann was geÀndert hat.

Mein Vorgehen:

  • Bei Start prĂŒfen:
If CurrentProject.Properties("Version") <> "2.4.3" Then
    MsgBox "Falsche Version.", vbCritical
    Application.Quit
End If
  • Änderungslog in separater Tabelle fĂŒhren
  • Optional: Git mit ACCDB-to-Text-Export nutzen (z. B. mit msaccess-vcs-addin)

Tabelle: Alt vs. Neu im VBA-Code

Alt (unsicher)Neu (empfohlen)
Declare ohne PtrSafe#If VBA7 Then Declare PtrSafe
Variant ĂŒberallTypisierte Variablen
On Error Resume NextOn Error GoTo Fehler + Protokollierung
String * 100Dim sText As String
Open "file.txt"ADODB.Stream mit Encoding
Public ID As LongÜbergabe ĂŒber Parameter oder Klasse

Mein Setup zur Codehygiene in Access-Projekten

MaßnahmeWerkzeug / Technik
FehlerhandlingEinheitliche Fehler:-Blöcke in jedem Modul
KompatibilitĂ€t prĂŒfenKompilierung in 64-Bit, PtrSafe testen
Unicode/ExportADODB.Stream fĂŒr alles mit Text
VersionsprĂŒfungeigene Property oder Tabelle
CodeanalyseMZ-Tools oder Rubberduck VBA

Alte VBA-Projekte sind wie Oldtimer. Sie fahren – aber Bremsen, Gurte und TÜV fehlen.

Wenn Du sie nicht modernisierst, riskierst Du irgendwann nicht nur AusfĂ€lle – sondern auch Ärger mit Sicherheit, KompatibilitĂ€t und Nutzern.

Mach’s wie ich: Nach und nach. Ohne Big Bang. Aber mit Plan.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

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