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

64 bit - Declare - PtrSafe Attribut = pffffff

Forumthread: 64 bit - Declare - PtrSafe Attribut = pffffff

64 bit - Declare - PtrSafe Attribut = pffffff
02.03.2019 11:33:05
Fred

Hallo Excel Profis,
ich bekomme bei folgenden Code eine Fehlermeldung die besagt, dass der Code auf 64-Bit-System aktualisiert werden soll,- ich die Declare-Anweisung aktualisieren soll und mit dem PtrSafe-Attribut markieren soll.
Option Explicit
Private Declare Function MakeSureDirectoryPathExists _
Lib "imagehlp.dll" (ByVal Pfad As String) As Long
Private Declare Function DeleteUrlCacheEntry Lib "wininet" Alias _
"DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long
Public Sub GetFiles()
On Error GoTo Fin
LoadFiles "http://api.clubelo.com/" & Format(Now, "YYYY-MM-DD")
Fin:
If Err.Number  0 Then MsgBox "Error: " & _
Err.Number & " " & Err.Description
End Sub
Public Sub LoadFiles(ByVal strURL As String)
Dim strBackup As String
Dim lngTMP As Long
strBackup = Environ("UserProfile") & "\Desktop\ELO33\"
Call DeleteUrlCacheEntry(strURL)
Call MakeSureDirectoryPathExists(strBackup)
lngTMP = URLDownloadToFile(0, strURL, _
strBackup & "Aktuell.csv", 0, 0)
End Sub
Kann mir jemand helfen, entsprechender Umstellung auf 64 Bit System ...
Mit freundlichen Gruß
Fred Neumann
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: 64 bit - Declare - PtrSafe Attribut = pffffff
02.03.2019 11:45:42
Nepumuk
Hallo Fred,
teste mal:
Private Declare PtrSafe Function MakeSureDirectoryPathExists _
    Lib "imagehlp.dll" (ByVal Pfad As String) As Long
Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "wininet" Alias _
    "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
    Alias "URLDownloadToFileA" ( _
    ByVal pCaller As LongPtr, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As LongPtr) As Long

Gruß
Nepumuk
Anzeige
AW: 64 bit - Declare - PtrSafe Attribut = pffffff
02.03.2019 12:20:36
Fred
Nepumuk, Super!
Danke und schönes Wochenende.
Gruß
Fred
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Umstellung auf das PtrSafe-Attribut in Excel VBA 64-Bit


Schritt-für-Schritt-Anleitung

Um Code für 64-Bit-Systeme in Excel VBA anzupassen, ist es notwendig, das PtrSafe-Attribut in den Declare-Anweisungen zu verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Finde die Declare-Anweisungen: Suche nach allen Declare Function oder Declare PtrSafe Function Anweisungen in deinem Code.
  3. Füge das PtrSafe-Attribut hinzu: Bei 64-Bit-Deklarationen musst du das PtrSafe-Attribut hinzufügen.
    Private Declare PtrSafe Function MakeSureDirectoryPathExists _
    Lib "imagehlp.dll" (ByVal Pfad As String) As Long
  4. Nutze LongPtr für Zeiger: Ersetze alle Long-Typen, die Zeiger repräsentieren, durch LongPtr.
    ByVal pCaller As LongPtr
  5. Teste den Code: Führe den Code aus und prüfe, ob es keine Fehler gibt.

Häufige Fehler und Lösungen

Hier sind einige häufige Fehler, die bei der Umstellung auf das PtrSafe-Attribut auftreten können, sowie deren Lösungen:

  • Fehlermeldung „Declare-Anweisung nicht gefunden“: Überprüfe, ob du das PtrSafe-Attribut korrekt hinzugefügt hast.
  • Type Mismatch-Fehler: Stelle sicher, dass alle Typen in den Declare-Anweisungen korrekt sind (z.B. LongPtr für Zeiger).
  • PtrSafe Attribute 64 Bit Error: Dies tritt auf, wenn das PtrSafe-Attribut fehlt oder nicht korrekt deklariert ist. Überprüfe alle Funktionen auf Richtigkeit.

Alternative Methoden

Falls du keine 64-Bit-Version von Excel verwendest, kannst du folgende Alternativen in Betracht ziehen:

  • 32-Bit Kompatibilität: Halte den ursprünglichen Code für 32-Bit-Versionen und nutze bedingte Kompilierung:
    #If Win64 Then
       ' 64-bit Code
    #Else
       ' 32-bit Code
    #End If
  • Verwendung von Excel-Funktionen: Überprüfe, ob du bestimmte Funktionen direkt in Excel verwenden kannst, anstatt externe DLLs zu deklarieren.

Praktische Beispiele

Hier ist ein Beispiel, wie du eine Funktion mit dem PtrSafe-Attribut korrekt deklarierst:

Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "wininet" _
Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long

Public Sub ClearCache()
    Dim url As String
    url = "http://example.com"
    Call DeleteUrlCacheEntry(url)
End Sub

Dieses Beispiel zeigt, wie du den DeleteUrlCacheEntry-Aufruf anpassen kannst, um ihn mit dem PtrSafe-Attribut in einer 64-Bit-Umgebung zu verwenden.


Tipps für Profis

  • Nutze LongPtr: Bei der Arbeit mit Zeigern in Excel VBA solltest du immer LongPtr verwenden, um sicherzustellen, dass dein Code sowohl in 32-Bit als auch in 64-Bit funktioniert.
  • Teste regelmäßig: Führe deinen Code regelmäßig in der VBA-Umgebung aus, um sicherzustellen, dass die Änderungen korrekt sind.
  • Dokumentiere Änderungen: Halte fest, welche Funktionen du geändert hast, um die Wartung des Codes zu erleichtern.

FAQ: Häufige Fragen

1. Was ist das PtrSafe-Attribut? Das PtrSafe-Attribut ist eine Anweisung, die in VBA verwendet wird, um anzugeben, dass eine Funktion in einer 64-Bit-Umgebung korrekt funktioniert.

2. Warum muss ich LongPtr verwenden? LongPtr wird verwendet, um sicherzustellen, dass Zeiger richtig behandelt werden, egal ob du eine 32-Bit oder 64-Bit Version von Excel verwendest.

3. Was mache ich, wenn ich einen PtrSafe Attribute 64 Bit Error erhalte? Überprüfe, ob das PtrSafe-Attribut in deinen Declare-Anweisungen vorhanden ist und ob alle Typen korrekt deklariert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige