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

Forumthread: Declare 64-Bit Problem

Declare 64-Bit Problem
20.09.2018 15:52:03
Karl-heinz
Hallo Forumsgemeinde,
meine Tools müssen derzeit unter Office 365 (32 Bit) und Office 2016 (64 Bit) laufen.
Es werden viele API-Aufrufe verwendet. Leider kommt bei u.a. Function unter 64 Bit der Fehler "Benutzerdefinierter Typ nicht definiert".
#If VBA7 And Win64 Then
Public Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hWnd As LongPtr, lpRect As RECT) As Long
#Else
Public Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT1) As Long
#End If
Ergänzend sei gesagt, dass meine Declarevorlagedatei die die o.a. Function einen Alias-Part enthält, der aber immer sofort beim Einfügen wieder rausgeworfen wird.
Hat einer eine Idee, was das sein kann?
Unter 32 Bit läuft alles und andere 64-Bit-Declares funktionieren auch.
viele Grüße
Karl-Heinz
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Declare 64-Bit Problem
21.09.2018 07:45:24
Mullit
Hallo,
wo kommt er hier denn her...?
Public Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT1) As Long

Gruß, Mullit
AW: Declare 64-Bit Problem
21.09.2018 08:57:05
Karl-heinz
Hallo Mullit,
einem geschulten Auge entgeht nix, vielen Dank für den wertvollen Tipp. Das war es.
Das Tool ist schon uralt und hatte zunächst nur 32-Bit-Funktionalität. Hier hatte ich aus bestimmten Gründen in anderem Modul RECT1 definiert und in Funktions-Declare übernommen.
Jetzt hatte ich natürlich aus Vorlagedatei die 64-Decs einfach dazukopiert und das einfach nicht gesehen.
viele Grüße
KH
Anzeige
AW: alles klar, prima...owT
21.09.2018 20:32:32
Mullit
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Umgang mit dem Declare 64-Bit Problem in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel (drücke ALT + F11).

  2. Erstelle ein neues Modul, indem du im Projektfenster mit der rechten Maustaste auf dein Projekt klickst und "Einfügen" > "Modul" auswählst.

  3. Füge den folgenden Code ein, um die Funktion GetWindowRect zu deklarieren:

    #If VBA7 And Win64 Then
        Public Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hWnd As LongPtr, lpRect As RECT) As Long
    #Else
        Public Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT1) As Long
    #End If
  4. Stelle sicher, dass die Struktur RECT korrekt definiert ist. Hier ist ein Beispiel:

    Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End Type
  5. Verwende die Funktion in deinem Code, um das Fenster zu erhalten, indem du den Handle (hWnd) übergibst.


Häufige Fehler und Lösungen

  • Fehler: "Benutzerdefinierter Typ nicht definiert"

    • Ursache: Möglicherweise wird ein Typ verwendet, der nicht definiert wurde, wie z.B. RECT1.
    • Lösung: Stelle sicher, dass alle verwendeten Typen, wie RECT, korrekt deklariert sind.
  • Fehler beim Kompilieren unter 64-Bit

    • Ursache: Du hast möglicherweise die falsche Deklaration verwendet.
    • Lösung: Überprüfe, ob die Deklarationen für 64-Bit korrekt mit PtrSafe versehen sind.

Alternative Methoden

Wenn du Probleme mit der Declare-Anweisung hast, kannst du auch auf die Verwendung von Klassen oder UserForms zurückgreifen, um Fensterinformationen zu erhalten. Diese Methoden sind möglicherweise nicht so performant, bieten jedoch eine benutzerfreundlichere Schnittstelle.


Praktische Beispiele

Hier ist ein einfaches Beispiel, um die Funktion GetWindowRect zu verwenden:

Sub TestGetWindowRect()
    Dim hWnd As LongPtr
    Dim rect As RECT

    ' Beispiel: Handle des aktiven Fensters
    hWnd = Application.hWnd

    ' Fensterposition abrufen
    If GetWindowRect(hWnd, rect) Then
        Debug.Print "Links: " & rect.Left & " Oben: " & rect.Top & " Rechts: " & rect.Right & " Unten: " & rect.Bottom
    Else
        MsgBox "Konnte das Fenster nicht abrufen."
    End If
End Sub

Tipps für Profis

  • Verwende #If VBA7 And Win64 um sicherzustellen, dass dein Code sowohl in 32-Bit- als auch in 64-Bit-Versionen von Excel funktioniert.
  • Halte deine Typdefinitionen in einem Modul, um die Wiederverwendbarkeit zu maximieren.
  • Teste deinen Code regelmäßig in beiden Umgebungen, um sicherzustellen, dass die declare ptrsafe Anweisungen korrekt funktionieren.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen 32-Bit und 64-Bit in VBA?
Der Hauptunterschied liegt in der Speicherkapazität. 64-Bit-Versionen können größere Datenmengen verarbeiten und benötigen spezielle Deklarationen wie PtrSafe.

2. Warum funktioniert meine Declare-Anweisung nicht?
Stelle sicher, dass du die richtigen Datentypen verwendest und dass die Funktion korrekt für 64-Bit deklariert ist. Überprüfe auch, ob alle benötigten Typen definiert sind.

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