Warum 64 Bit jetzt wichtig ist

Viele KMU arbeiten immer noch mit Office 32 Bit.
Aber: Microsoft schiebt 64 Bit als Standard.
Neue Rechner, neue Installationen – oft automatisch 64 Bit.

Das Problem: Alte VBA-Projekte laufen nicht mehr ohne Anpassung.
Das betrifft vor allem API-Deklarationen und Zeiger.

Was Du ändern musst

1. PtrSafe-Kennzeichnung

Jede API-Deklaration muss PtrSafe enthalten.
Ohne das läuft der Code nicht unter 64 Bit.

#If VBA7 Then
    Private Declare PtrSafe Function Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Long
#Else
    Private Declare Function Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) As Long
#End If

2. LongPtr statt Long für Zeiger

Unter 64 Bit sind Zeiger 64 Bit breit.
Long reicht nicht mehr – Du brauchst LongPtr.

#If VBA7 Then
    Dim hwnd As LongPtr
#Else
    Dim hwnd As Long
#End If

3. Typen prüfen und anpassen

Viele API-Funktionen erwarten jetzt LongPtr, LongLong oder Any.
Du solltest alle Deklarationen durchsehen.

Beispiel: FindWindow anpassen.

#If VBA7 Then
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

Typenvergleich 32 vs. 64 Bit

Typ32 Bit64 Bit
Long4 Byte4 Byte
LongLongnicht verfügbar8 Byte
LongPtr4 Byte8 Byte
Integer2 Byte2 Byte
Stringgleichgleich

Merksatz: Zeiger → immer LongPtr.
Mathematik → lieber Long oder LongLong.

Wie Du vorgehst

Schritt-für-Schritt

  1. Alle Declare-Anweisungen suchen
  2. PtrSafe ergänzen
  3. Zeigertypen prüfen und ggf. in LongPtr umwandeln
  4. Testen auf 64 Bit
  5. Final gegenprüfen auf 32 Bit – wegen Kompatibilität

Optional: Automatisierung

Ich hab mir dafür ein kleines Tool gebaut, das alle Module scannt:

Public Sub DeklarationenPrüfen()
    Dim comp As Object
    For Each comp In Application.VBE.ActiveVBProject.VBComponents
        If comp.Type = 1 Then ' nur Standard-Module
            If InStr(comp.CodeModule.Lines(1, comp.CodeModule.CountOfLines), "Declare") > 0 Then
                Debug.Print comp.Name & " enthält API-Deklarationen"
            End If
        End If
    Next
End Sub

Meine Empfehlung

Mach den Schritt jetzt.
Je länger Du wartest, desto größer der Umbau später.
Access lebt noch – aber nur, wenn Du Deine Projekte pflegst.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

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