Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

declare ptrsafe automatisch korrigieren

declare ptrsafe automatisch korrigieren
04.02.2022 11:33:45
JoJo
Ich habe viele Excel-Dateien mit Makros.
Mit der Umstellung auf 365 kommt beim Öffnen eine Fehlermeldung, wenn im Code eine Declare Anweisung enthalten ist.
Diese muss um den Zusatz ptrsafe ergänzt werden.
Kann man per VBA alle Excel-Dateien in einem festgelegten Pfad durchgehen und
im zugehörigen Code
Declare durch
Declare ptrsafe
ersetzen (+ speichern),
so dass beim nächsten Öffnen keine Fehlermeldung mehr kommt?

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: declare ptrsafe automatisch korrigieren
04.02.2022 12:17:31
Nepumuk
Hallo JoJo,
so einfach geht das nicht, denn mit PtrSafe ist es nicht getan. Da müssen auch die Deklarationen der Parameter und der Rückgabewerte angepasst werden. Zudem musst du die Variablen welche die Rückgabewerte aufnehmen anpassen.
Beispiel alte Version:

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Die neue Version:

Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongPtrA" ( _
ByVal hwnd As LongPtr, _
ByVal nIndex As Long, _
ByVal dwNewLong As LongPtr) As LongPtr
Gruß
Nepumuk
Anzeige
AW: declare ptrsafe automatisch korrigieren
04.02.2022 14:01:53
volti
Hallo zusammen,
da hat Nepumuk ja auch gleich eine der Exclusive-Funktionen rausgekramt, die neben dem alten 32-Bit Excel VBA6 auch im neuen Excel VBA7 noch zwischen 32 und 64 Bit unterscheidet.
Den in Deiner Mappe verwendeten Funktionsnamen könntest Du auch beibehalten, wenn nur der Alias mit Bezug auf den wirklichen Funktionsnamen stimmt.
Hier mal ergänzend ein Declare-Beispiel, das für alle Versionen funktioniert:
Code:

[Cc]

#If VBA7 Then #If Win64 Then Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongPtrA" ( _ ByVal hwnd As LongPtr, ByVal nIndex As Long, _ ByVal dwNewLong As LongPtr) As LongPtr #Else Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _ ByVal hwnd As LongPtr, ByVal nIndex As Long, _ ByVal dwNewLong As LongPtr) As LongPtr #End If #Else ' VBA6 Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _ ByVal hwnd As Long, ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long #End If

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige