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
Problem | Ursache | Lösung |
---|---|---|
„Deklaration ungĂŒltig“ | Kein PtrSafe | Declare PtrSafe Function nutzen |
„Fehler 48“ (DLL nicht ladbar) | 32-Bit-DLL in 64-Bit VBA | DLL als 64-Bit neu kompilieren |
„Fehler 453“ (Entry Point fehlt) | Signatur oder DLL stimmt nicht | API-Deklaration korrigieren |
Absturz bei ActiveX-Elementen | inkompatible Steuerelemente | auf 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
Bereich | Umsetzung |
---|---|
API-Calls | Nur ĂŒber #If VBA7 Then ⊠PtrSafe |
Long vs. LongPtr | Zeiger immer mit LongPtr |
ActiveX | nur wenn zwingend notwendig |
Externe DLLs | 64-Bit-Version + korrekte Pfade |
Dokumentation | KompatibilitĂ€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.
Keine Antworten