Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

64Bit Excel: "If Win64" vs. "If VBA7"

Forumthread: 64Bit Excel: "If Win64" vs. "If VBA7"

64Bit Excel: "If Win64" vs. "If VBA7"
17.08.2017 04:14:16
Rainer
Hallo VBA-Freunde,
Ich denke ich habe mein "libnodave"-Problem gelöst. Genau weiß ich es aber erst, wenn nächste Woche mein Laptop von der Reperatur zurück kommt.
Aber andere Frage, betreffend die Deklaration von Funktionen zur gleichzeitigen Verwendung in 32Bit und 64Bit. Wo ist der Unterschied in folgenden Deklarationen:

#If Win64 Then
Public Declare PtrSafe Function SetWindowPos _
Lib "user32" (ByVal hwnd As Long, _
) As Long
#Else
Public Declare Function SetWindowPos _
Lib "user32" (ByVal hwnd As Long, _
) As Long
#End If
und

#If VBA7 Then
Public Declare PtrSafe Function SetWindowPos Lib "user32" _
(ByVal hWnd As LongPtr, _
) As Long
#Else
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hWnd As LongPtr, _
) As Long
#End If
Danke im Vorraus,
Rainer
Anzeige

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

Betreff
Datum
Anwender
Anzeige
Auch witzig: System32 und SysWOW64
17.08.2017 09:50:12
Rainer
Hallo Case,
danke für den interessanten Link. Der "VBA7" Parameter scheint ziemlicher Murks und der "WinXX" Parameter ist zum Glück sehr unsinnig benannt. Aber ok, muss man eben wissen.
Zum Glück habe ich auch mein anderes Rätsel lösen können. Die 32bit Version von Excel findet keine dll aus dem Ordner System32, wenn es sich um ein 64bit Windows handelt. Die dll für 32bit muss im Ordner SysWOW64 abgelegt sein. Ein Fest der Logik!
Siehe auch: https://superuser.com/questions/281730/system32-and-syswow64-on-windows-7/284701#284701
Gruß Rainer
Anzeige
;
Anzeige

Infobox / Tutorial

64Bit Excel: Unterschiede zwischen "If Win64" und "If VBA7"


Schritt-für-Schritt-Anleitung

  1. Verstehe die Unterschiede zwischen den Anweisungen:

    • #If Win64 Then wird verwendet, um Code für 64-Bit Excel zu deklarieren.
    • #If VBA7 Then wird verwendet, um sicherzustellen, dass der Code mit VBA7 oder höher kompatibel ist.
  2. Deklaration in deinem VBA-Projekt:

    #If Win64 Then
    Public Declare PtrSafe Function SetWindowPos _
    Lib "user32" (ByVal hwnd As Long, _
    ) As Long
    #Else
    Public Declare Function SetWindowPos _
    Lib "user32" (ByVal hwnd As Long, _
    ) As Long
    #End If
  3. Verwende den LongPtr Datentyp für 64-Bit:

    #If VBA7 Then
    Public Declare PtrSafe Function SetWindowPos Lib "user32" _
    (ByVal hWnd As LongPtr, _
    ) As Long
    #Else
    Public Declare Function SetWindowPos Lib "user32" _
    (ByVal hWnd As LongPtr, _
    ) As Long
    #End If

Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert"
    Lösung: Stelle sicher, dass die korrekten Datentypen (z.B. LongPtr) verwendet werden, besonders wenn du für 64-Bit entwickelst.

  • Fehler: Kompilierungsfehler bei der Deklaration
    Lösung: Überprüfe, ob die richtigen Bedingungskommandos (#If Win64 Then oder #If VBA7 Then) verwendet werden.


Alternative Methoden

Eine Alternative zu den Conditional Compilation Anweisungen ist die Verwendung von #If VBA7 And Win64 Then, um sicherzustellen, dass der Code sowohl für VBA7 als auch für 64-Bit geeignet ist:

#If VBA7 And Win64 Then
Public Declare PtrSafe Function SetWindowPos Lib "user32" _
(ByVal hWnd As LongPtr, _
) As Long
#Else
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hWnd As Long, _
) As Long
#End If

Praktische Beispiele

Ein häufiges Beispiel in der Nutzung von #If-Anweisungen ist das Setzen von Fensterpositionen in Excel:

Sub SetWindowPosition()
    #If Win64 Then
        ' Code für 64-Bit Excel
        Dim hwnd As LongPtr
    #Else
        ' Code für 32-Bit Excel
        Dim hwnd As Long
    #End If
    ' Fensterposition setzen
    SetWindowPos hwnd, 0, 100, 100, 800, 600, 0
End Sub

Tipps für Profis

  • Nutze die #If-Anweisungen, um deinen Code so flexibel wie möglich zu gestalten. Das reduziert die Wahrscheinlichkeit von Laufzeitfehlern bei der Ausführung auf verschiedenen Systemen.
  • Denke daran, dass die DLLs für 32-Bit in SysWOW64 und für 64-Bit in System32 liegen. Dies ist wichtig, wenn du externe Komponenten einbindest.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen #If Win64 und #If VBA7?
#If Win64 prüft, ob die Excel-Version 64-Bit ist, während #If VBA7 sicherstellt, dass die verwendete VBA-Version 7 oder höher ist.

2. Muss ich beide Anweisungen verwenden?
Es ist ratsam, beide Anweisungen zu verwenden, um sicherzustellen, dass dein Code sowohl auf 32-Bit als auch auf 64-Bit Systemen funktioniert.

3. Wie erkenne ich, ob ich 32-Bit oder 64-Bit Excel habe?
Du kannst dies in Excel unter "Datei" > "Konto" > "Über Excel" überprüfen. Dort wird die Version angezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige