Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Aktualisieren auf 64 Bit

Aktualisieren auf 64 Bit
19.05.2021 08:02:48
Ansgar
Hallo zusammen,
ich habe lange an einer Exceltabelle gearbeitet. Auch mit viel Hilfe aus diesem Forum. Nun wurde mein Rechner auf 64 bit umgestellt. Ich bekomme natürlich beim Öffnen der Excel Tabelle eine Fehlermeldung. Die Meldung besagt, das die Declare Anweisungen aktualisiert werden müssen und Sie mit dem PtrSafe-Attribut markiert werden müssen. Bei mir verursacht es ein großes Fragezeichen.
Ich bitte höflichst hier um Hilfe.
Hier der Text, der angeblich geändert/angepasst werden muss:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" ( _
ByVal hWnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long
Private Declare Function SetWindowRgn Lib "user32" ( _
ByVal hWnd As Long, _
ByVal hRgn As Long, _
ByVal bRedraw As Boolean) As Long
Private Declare Function ScreenToClient Lib "user32" ( _
ByVal hWnd As Long, _
lpPoint As POINTAPI) As Long
Private Declare Function GetWindowRect Lib "user32" ( _
ByVal hWnd As Long, _
lpRect As RECT) As Long
Private Declare Function CreateRectRgnIndirect Lib "gdi32" ( _
lpRect As RECT) As Long
Ich hoffe hier kann mir geholfen werden.
Schöne Grüße Ansgar
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aktualisieren auf 64 Bit
19.05.2021 08:23:56
Nepumuk
Hallo Ansgar,
so:
Code:

[Cc]

Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As LongPtr Private Declare PtrSafe Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongPtrA" ( _ ByVal hwnd As LongPtr, _ ByVal nIndex As Long) As LongPtr Private Declare PtrSafe Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongPtrA" ( _ ByVal hwnd As LongPtr, _ ByVal nIndex As Long, _ ByVal dwNewLong As LongPtr) As LongPtr Private Declare PtrSafe Function DrawMenuBar Lib "user32.dll" ( _ ByVal hwnd As LongPtr) As Long Private Declare PtrSafe Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _ ByVal hwnd As LongPtr, _ ByVal wMsg As Long, _ ByVal wParam As LongPtr, _ ByRef lParam As Any) As LongPtr Private Declare PtrSafe Function ReleaseCapture Lib "user32.dll" () As Long Private Declare PtrSafe Function SetWindowRgn Lib "user32.dll" ( _ ByVal hwnd As LongPtr, _ ByVal hRgn As LongPtr, _ ByVal bRedraw As Long) As Long Private Declare PtrSafe Function ScreenToClient Lib "user32.dll" ( _ ByVal hwnd As LongPtr, _ ByRef lpPoint As POINTAPI) As Long Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" ( _ ByVal hwnd As LongPtr, _ ByRef lpRect As RECT) As Long Private Declare PtrSafe Function CreateRectRgnIndirect Lib "gdi32.dll" ( _ ByRef lpRect As RECT) As LongPtr

Damit ist es aber noch nicht getan. Schau auf die Parameter und die Rückgabewerte. Da musst du deine Variablen anpassen.
Beispiel "FindWindow", die Funktion gibt einen LongPtr-Wert zurück. Du musst also die Variable, die den Rückgabewert aufnimmt, als LongPtr deklarieren.
Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Aktualisieren von VBA-Code auf 64-Bit


Schritt-für-Schritt-Anleitung

Um deinen VBA-Code auf 64-Bit zu aktualisieren, folge diesen Schritten:

  1. Öffne den VBA-Editor in Excel mit ALT + F11.
  2. Finde die Declare-Anweisungen in deinem Code. Diese sind oft am Anfang eines Moduls.
  3. Füge das PtrSafe-Attribut hinzu. Ändere jede Declare Function Zeile, um PtrSafe hinzuzufügen. Beispiel:
    Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
       ByVal lpClassName As String, _
       ByVal lpWindowName As String) As LongPtr
  4. Ersetze Long durch LongPtr für Rückgabewerte und Variablen, die von diesen Funktionen verwendet werden. Zum Beispiel:
    Dim hWnd As LongPtr
  5. Überprüfe alle Funktionen, die auf user32.dll zugreifen, und passe sie entsprechend an. Achte darauf, auch die richtigen Datentypen zu verwenden.

Häufige Fehler und Lösungen

  • Fehlermeldung: "Der Code in diesem Projekt muss für die Verwendung auf 64-Bit-Systemen aktualisiert werden."

    • Lösung: Überprüfe alle Declare-Anweisungen und stelle sicher, dass sie mit PtrSafe und den richtigen Datentypen aktualisiert wurden.
  • Falscher Datentyp für Rückgabewerte.

    • Lösung: Stelle sicher, dass Rückgabewerte von Funktionen, die Pointer zurückgeben, als LongPtr deklariert sind.

Alternative Methoden

Falls du auf 64-Bit umstellen möchtest, aber keine Anpassungen am Code vornehmen kannst, gibt es folgende Optionen:

  • Nutze eine 32-Bit-Version von Excel, falls möglich.
  • Verwende Wrapper-Funktionen in einer externen DLL, die die 64-Bit-Funktionen aufruft und die Komplexität im VBA-Code reduziert.

Praktische Beispiele

Hier sind einige Beispiele, wie du einige der Declare-Anweisungen aktualisieren kannst:

Private Declare PtrSafe Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongPtrA" ( _
    ByVal hwnd As LongPtr, _
    ByVal nIndex As Long) 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

Achte darauf, dass jede Funktion, die mit lib "user32" arbeitet, auf die 64-Bit-Version aktualisiert wird.


Tipps für Profis

  • Teste deinen Code regelmäßig, nachdem du Änderungen vorgenommen hast, um sicherzustellen, dass alles wie gewünscht funktioniert.
  • Nutze Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind, bevor sie verwendet werden.
  • Halte eine Backup-Kopie deines Codes, bevor du mit der Aktualisierung beginnst.

FAQ: Häufige Fragen

1. Muss ich alle meine VBA-Projekte aktualisieren, wenn ich auf 64-Bit wechsle? Ja, alle VBA-Projekte, die Declare-Anweisungen verwenden, müssen aktualisiert werden, um das PtrSafe-Attribut und die richtigen Datentypen zu verwenden.

2. Was passiert, wenn ich die Declare-Anweisungen nicht aktualisiere? Wenn du die Declare-Anweisungen nicht aktualisierst, wird dein Code nicht funktionieren und du bekommst Fehlermeldungen, wenn du versuchst, die Funktionen auszuführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige