VBA Probleme beim Wechsel auf Word 64-Bit => Was bei Migrationen auf moderne Office-Versionen zu beachten ist

Wenn „Declare“ nicht mehr funktioniert

Der Umstieg auf Word 64-Bit ist meistens keine Entscheidung –
sondern kommt mit dem nÀchsten Office-Update.
Und plötzlich knallt Dein sauberer VBA-Code.

Fehlermeldungen wie „Deklaration ungĂŒltig“ oder „DLL nicht gefunden“ tauchen auf.
Grund: Deine API-Aufrufe sind nicht 64-Bit-kompatibel.

Ich zeige Dir, wie Du solche Probleme sauber löst.
Ohne Word neu zu installieren. Und ohne Copy&Paste aus Foren.

Schritt 1: Welche Version ist ĂŒberhaupt installiert?

Public Function IstOffice64Bit() As Boolean
#If Win64 Then
    IstOffice64Bit = True
#Else
    IstOffice64Bit = False
#End If
End Function

Oder in der Word-OberflÀche:
Datei → Konto → Info → „64-Bit“ steht direkt dabei.

Schritt 2: API-Deklarationen anpassen

Jeder API-Call muss bei 64-Bit mit PtrSafe markiert sein.
Und alle Zeiger mĂŒssen LongPtr heißen.

Beispiel alt (nur 32-Bit):

Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Neu (kompatibel mit beiden Welten):

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

Wichtig:
PtrSafe nur fĂŒr 64-Bit.
Aber Du kannst den Code auch in 32-Bit nutzen – mit #If.

Schritt 3: Typen anpassen – Long vs. LongPtr

Viele Deklarationen verwenden Long fĂŒr Handles, Pointer, RĂŒckgabewerte.
In 64-Bit mĂŒssen diese in LongPtr geĂ€ndert werden.

Beispiel fĂŒr Shell-Execute:

#If VBA7 Then
    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hwnd As LongPtr, ByVal lpOperation As String, _
        ByVal lpFile As String, ByVal lpParameters As String, _
        ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
#Else
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hwnd As Long, ByVal lpOperation As String, _
        ByVal lpFile As String, ByVal lpParameters As String, _
        ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If

Wenn Du das nicht machst, funktioniert der Code auf 64-Bit einfach nicht.

Schritt 4: COM-Addins, DLLs, externe Komponenten

Falls Du mit Word VBA eigene DLLs aufrufst:
Auch die DLL muss 64-Bit sein.

#If VBA7 Then
    Declare PtrSafe Function MeineFunktion Lib "meinedll64.dll" () As LongPtr
#End If

Wenn Du eine 32-Bit-DLL aufrufst, kommt Fehler 48 oder 53.
Dann hilft nur: DLL neu kompilieren – oder extern per Bridge starten.

Schritt 5: ActiveX-Steuerelemente vermeiden

Viele Ă€ltere Word-Vorlagen enthalten ActiveX-Felder: z. B. Kalender, Combobox, Textfeld.
Diese laufen oft nicht mehr stabil unter 64-Bit.

Besser:

  • Plain Form Controls (Entwicklertools → Legacy Tools)
  • Inhalte mit Inhaltssteuerelementen (Content Controls)
  • Kalender z. B. als eingebettetes HTML via WebView2

Tabelle: Fehlerquellen und Lösungen

ProblemUrsacheLösung
„Deklaration ungĂŒltig“Kein PtrSafeDeclare PtrSafe Function nutzen
„Fehler 48“ (DLL nicht ladbar)32-Bit-DLL in 64-Bit VBADLL als 64-Bit neu kompilieren
„Fehler 453“ (Entry Point fehlt)Signatur oder DLL stimmt nichtAPI-Deklaration korrigieren
Absturz bei ActiveX-Elementeninkompatible Steuerelementeauf Standardfelder umstellen

Mein VBA-Testcode fĂŒr 32- und 64-Bit

Public Sub VersionTest()
    If IstOffice64Bit() Then
        MsgBox "Du nutzt Word 64-Bit.", vbInformation
    Else
        MsgBox "Du nutzt Word 32-Bit.", vbExclamation
    End If
End Sub

Und zur Sicherheit alle Declare-Statements in ein Modul auslagern – z. B. modAPICompat.

Mein Setup fĂŒr 64-Bit-kompatibles Word VBA

BereichUmsetzung
API-CallsNur ĂŒber #If VBA7 Then 
 PtrSafe
Long vs. LongPtrZeiger immer mit LongPtr
ActiveXnur wenn zwingend notwendig
Externe DLLs64-Bit-Version + korrekte Pfade
DokumentationKompatibilitĂ€tsprĂŒfung im Git

Word VBA funktioniert auch in 64-Bit.

Aber nicht, wenn der Code von 2006 stammt und nie einer hingeschaut hat.

Wenn Du heute umstellst, hast Du morgen Ruhe.
Und Deine Add-ins laufen auch in der nÀchsten Office-Version.
Schnell. Stabil. Und ohne „Deklaration ungĂŒltig“-Fehler.

Kategorien:

Keine Antworten

Schreibe einen Kommentar

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