VBA 32-64bit Fehler beheben
Schritt-für-Schritt-Anleitung
Um den Fehler "The code in this project must be updated for use on 64-bit system" zu beheben, musst Du die Declare
-Anweisungen in Deinem VBA-Code anpassen. Hier sind die Schritte:
- Öffne das VBA-Editor-Fenster in Excel, indem Du
ALT + F11
drückst.
- Finde die betroffenen
Declare
-Anweisungen. Diese könnten so aussehen:
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (LpVersionInformation As OSVERSIONINFO) As Long
- Füge das
PtrSafe
-Attribut hinzu und passe die Datentypen an. Hier ein Beispiel, wie die Anweisungen nach der Anpassung aussehen sollten:
Private Declare PtrSafe Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As LongPtr)
Private Declare PtrSafe Function MapVirtualKey Lib "user32.dll" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare PtrSafe Function GetVersionEx Lib "kernel32.dll" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
- Speichere Deinen VBA-Code und teste das Userform erneut.
Häufige Fehler und Lösungen
Alternative Methoden
Falls Du nicht die Declare
-Anweisungen manuell anpassen möchtest, könntest Du auch auf VBA-Bibliotheken zurückgreifen, die bereits für 64-Bit optimiert sind. Diese Bibliotheken bieten oft zusätzliche Funktionen und sind einfacher zu verwenden.
Praktische Beispiele
Hier ist ein Beispiel, wie Du die GetVersionEx
-Funktion mit dem aktualisierten Code verwenden kannst:
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Sub CheckOSVersion()
Dim osInfo As OSVERSIONINFO
osInfo.dwOSVersionInfoSize = Len(osInfo)
If GetVersionEx(osInfo) Then
MsgBox "Windows Version: " & osInfo.dwMajorVersion & "." & osInfo.dwMinorVersion
End If
End Sub
Tipps für Profis
- Verwende
LongPtr
für Zeiger und Handles unter 64-Bit, da dies helfen kann, viele Komplikationen zu vermeiden.
- Teste Deine VBA-Projekte regelmäßig unter beiden Versionen (32-Bit und 64-Bit), um sicherzustellen, dass sie plattformübergreifend funktionieren.
- Nutze die Windows API-Dokumentation, um sicherzustellen, dass Du die richtigen Funktionsaufrufe und Parameter verwendest.
FAQ: Häufige Fragen
1. Wie kann ich sicherstellen, dass der Code sowohl unter 32 als auch unter 64 Bit funktioniert?
Verwende bedingte Kompilierung, um den Code entsprechend der Plattform anzupassen. Beispiel:
#If VBA7 Then
Private Declare PtrSafe Function ...
#Else
Private Declare Function ...
#End If
2. Was ist das PtrSafe
-Attribut?
Das PtrSafe
-Attribut ist erforderlich, um anzugeben, dass der Code für 64-Bit-Versionen von VBA geeignet ist. Es signalisiert, dass die Funktion korrekt mit 64-Bit-Daten umgehen kann.
3. Welche Änderungen sind notwendig, wenn ich eine 32-Bit-Anwendung auf 64-Bit portiere?
Alle Declare
-Anweisungen müssen das PtrSafe
-Attribut enthalten und die Datentypen müssen entsprechend geändert werden, insbesondere bei Zeigern, wo LongPtr
verwendet werden sollte.