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

Forumthread: Wechsel von 32 auf 64 bit

Wechsel von 32 auf 64 bit
31.10.2012 20:19:21
32
Hallo Forum,
Ich habe ein programm gebastelt auf dem Excel/VBA 2010 in einem 32bit System, und jetzt habe ich ein 64bit System.
Bekomme immer einen Fehler bei dem aufruf:

Private Declare Function apiCreateFullPath _
Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long

Fehlermeldun:
... Überarbeiten Sie die Anweisungen und Markieren Sie sie mit dem Ptr-Save attribut
Was kann ich machen das es so wol in der 32 und in der 64 wersion funktioniert?
Besten Dank
Steve

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wechsel von 32 auf 64 bit
31.10.2012 20:30:10
32

Hallo Steve,
das Zauberwort heißt "bedingte Kompilierung".
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

#If Win64 Then
Private Declare PtrSafe Function apiCreateFullPath Lib "imagehlp.dll" Alias _
  "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long
#Else
Private Declare Function apiCreateFullPath Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" _
  (ByVal lpPath As String) As Long
#End If


« Gruß Sepp »

Anzeige
AW: Wechsel von 32 auf 64 bit
31.10.2012 21:31:03
32
Besten Dank Sepp, bin mir gar nciht gewönt das, wen etwas Rot geschrieben ist im Programm, das Programm trotzdem funktioniert.
Ist das das einzige das wechselt in VBA 64bit "PtrSave", oder muss ich da auch noch auf anderes achten?
Recht herzlichen dank nochmals :)
Steve

AW: Wechsel von 32 auf 64 bit
31.10.2012 23:03:46
32

Hallo Steve,
außer den API-Deklarationen sollte sich nicht allzu viel verändern.

« Gruß Sepp »

Anzeige
AW: Wechsel von 32 auf 64 bit
31.10.2012 23:16:42
32
Hallo,
oder muss ich da auch noch auf anderes achten?
du kannst auf Userforms nur noch die Controls der FM20.dll benutzen.
Gruß
Nepumuk
;

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

Wechsel von 32 auf 64 Bit in Excel VBA


Schritt-für-Schritt-Anleitung

Um deine VBA-Programme von einer 32-Bit-Umgebung auf eine 64-Bit-Umgebung umzustellen, musst du die API-Deklarationen anpassen. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (ALT + F11).
  2. Finde die API-Deklarationen, die du in deinem Code verwendet hast. Zum Beispiel:
    Private Declare Function apiCreateFullPath _
    Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long
  3. Füge bedingte Kompilierung hinzu, um zwischen 32-Bit und 64-Bit zu unterscheiden. Der Code sollte so aussehen:
    #If Win64 Then
       Private Declare PtrSafe Function apiCreateFullPath _
       Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long
    #Else
       Private Declare Function apiCreateFullPath _
       Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long
    #End If
  4. Überprüfe die anderen API-Deklarationen und stelle sicher, dass sie das PtrSafe Attribut verwenden, wenn du auf 64-Bit umstellst.

Häufige Fehler und Lösungen

Ein häufiges Problem bei der Umstellung auf 64-Bit ist das Fehlen des PtrSafe Attributs. Wenn du diesen Fehler erhältst:

  • Fehlermeldung: "Überarbeiten Sie die Anweisungen und markieren Sie sie mit dem Ptr-Safe Attribut."

Lösung: Stelle sicher, dass alle deine Private Declare Function Anweisungen das PtrSafe Attribut enthalten.

Ein weiterer Fehler kann sein, dass bestimmte Controls in Userforms nicht mehr funktionieren. Wenn du beispielsweise auf die FM20.dll zugreifen möchtest, achte darauf, dass du nur die kompatiblen Controls verwendest.


Alternative Methoden

Falls du nicht die API-Deklarationen anpassen möchtest, gibt es auch alternative Ansätze:

  • Verwende integrierte Excel-Funktionen anstelle von API-Aufrufen, wann immer das möglich ist. Excel bietet viele eingebaute Funktionen, die oft einfacher zu handhaben sind.
  • Nutze Wrapper-Funktionen, die die Komplexität der API-Deklarationen abstrahieren.

Praktische Beispiele

Hier ist ein einfaches Beispiel, das die Verwendung einer API-Deklaration zeigt, die sowohl in 32-Bit als auch in 64-Bit funktioniert:

#If Win64 Then
    Private Declare PtrSafe Function apiCreateFullPath _
    Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long
#Else
    Private Declare Function apiCreateFullPath _
    Lib "imagehlp.dll" Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long
#End If

Sub TestFunction()
    Dim path As String
    path = "C:\MeinVerzeichnis\"
    apiCreateFullPath path
End Sub

Dieses Beispiel zeigt, wie du die MakeSureDirectoryPathExists Funktion in beiden Umgebungen verwenden kannst.


Tipps für Profis

  • Nutze bedingte Kompilierung systematisch. Dies hilft dir, deinen Code sauber und wartbar zu halten.
  • Teste deinen Code regelmäßig in beiden Versionen (32-Bit und 64-Bit), um sicherzustellen, dass alles wie erwartet funktioniert.
  • Halte deine API-Deklarationen kommentiert und dokumentiert, um die Übersichtlichkeit zu verbessern.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen 32-Bit und 64-Bit in VBA?
Der Hauptunterschied liegt in der Speicherkapazität und der Art und Weise, wie API-Deklarationen gehandhabt werden. 64-Bit erfordert das PtrSafe Attribut.

2. Muss ich jede API-Deklaration ändern, wenn ich von 32 auf 64 Bit wechsle?
Ja, alle Private Declare Function Anweisungen müssen das PtrSafe Attribut enthalten, wenn sie in einer 64-Bit Umgebung verwendet werden.

3. Was passiert, wenn ich das PtrSafe Attribut vergesse?
Wenn du das Attribut vergisst, wird dein VBA-Code in einer 64-Bit Umgebung nicht funktionieren und du erhältst eine Fehlermeldung.

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