VBA Fehlermeldung Code auf 64-Bit-System aktualisieren

VBA - Visual Basic for Application

Hat man ältere VBA Projekte und Module im Einsatz und stellt auf eine neuere Office-Version um, z.B. Office 365, kann es passieren, dass man die folgende Fehlermeldung erhält:

Fehler beim Kompilieren:

Der Code in diesem Projekt muss für die Verwendung auf 64-Bit-Systemen aktualisiert werden. Überarbeiten und aktualisieren Sie Declare-Anweisungen, und markieren Sie sie mit dem PtrSafe-Attribut.

Screenshot VBA Fehler beim Kompilieren: Der Code in diesem Projekt muss für die Verwendung auf 64-Bit-Systemen aktualisiert werden.
VBA Fehlermeldung

Eigentlich ist das schon eine recht gute Fehlermeldung, weil diese ziemlich genau beschreibt, was falsch läuft. Hat man aber nicht täglich mit VBA zu tun, weil man sein letztes Script oder Modul schon vor Jahren geschrieben hat, so braucht man doch ein wenig Erläuterung.

Ausgangssituation

Wenn diese Fehlermeldung auftritt hat man vermutlich VBA-Code mit einer declare-Anweisung eingebunden, wie wir das für das automatische Drucken von Dateien aus E-Mails benötigen.


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

Die Declare-Anweisung verwendet man zum Erstellen einer Referenz zu einer Funktion, die sich in einer Dynamic-Link-Library (dll) befindet.

Bestseller Nr. 1

Lösung des Problem

Die Lösung des Problems besteht darin, das Schlüsselwort bzw. Keyword PtrSafe einzubinden


Private Declare PtrSafe 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

PtrSafe wird für alle VBA-Entwicklungsumgebungen benötigt, die auf Basis VBA7 bzw. Office-Installationen die auf 64-Bit Basis installiert worden sind. Für die Verwendung von PtrSafe gibt es zwischen den verschiedenen Office-Versionen Unterschiede.

Wenn es erforderlich ist, dass man abwärtskompatibel ist, dann kann man die folgenden Compiler-Anweisungen verwenden:

#If VBA7 Then
Declare PtrSafe Sub...
#Else
Declare Sub...
#EndIf

Mit dem PtrSafe-Schlüsselwort wird explizit angewiesen die 64-Bit-Version der entsprechenden DLL-Funktion zu verwenden. Hier muss man ggf. aufpassen. Wenn diese Funktion auch spezielle 64-Bit Variablen als Übergabeparameter erwartet oder als Rückgabewert liefert, dann muss man seinen VBA-Quellcode diesbezüglich anpassen. Der Datentyp Long kann in der 64Bit-Variante LongLong sein.

Bestseller Nr. 1
Bestseller Nr. 2
Bestseller Nr. 3

Ein Kommentar

  1. Danke. Endlich habe ich das Script unserer Access-Datenbank auf 64-Bit aktualisiert. Habe mich lange davor gedrückt und musste heute feststellen, dass es mit dieser Anleitung in wenigen Minuten erledigt war. Ich hatte schon angst, dass ich die nächsten Monate mit portieren beschäftigt bin.

Kommentar hinterlassen

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