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

Forumthread: Code auf 64bit aktualisieren

Code auf 64bit aktualisieren
26.09.2019 11:46:18
Marcus
Hallo zusammen,
habe einen neuen Firmen PC und dort kommt sobald ich eine alte Datei von mir öffne, ich soll den Code für das Projekt auf 64 BIT aktuallisieren. Bloß wie und wo.
der Code der rot hinterlegt ist (installiert ist jetzt Excel 2016):
Declare Function MakePath Lib "imagehlp.dll" _
Alias "MakeSureDirectoryPathExists" (ByVal _
lpPath As String) As Long
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Such im Archiv nach "PtrSafe". (owT)
26.09.2019 11:53:48
EtoPHG

AW: Such im Archiv nach "PtrSafe". (owT)
26.09.2019 12:32:33
Marcus
@Etophg
wie und wo mache ich das?
AW: Nach einem kurzen Blick...
26.09.2019 12:51:41
Marcus
@CASE
ja das habe ich auch gefunden, nur weis ich nicht was ich an meinem Code ändern muss um ihn kompatibel zu machen? das Long auf LongPtr, des reicht wohl nicht.
muss ich die Zeile dort kpl. kopieren und meinen Code ersetzen?
Bitte um Hilfe für Dumme hihi
danke Marcus
AW: Nach einem kurzen Blick...
26.09.2019 12:56:29
Nepumuk
Hallo Marcus,
LongPtr brauchst du nur für Pointer die Funktion gibt aber nur 0 (fehlgeschlagen) oder 1 (erfolgreich) zurück. also:
Declare PtrSafe Function MakePath Lib "imagehlp.dll" _
    Alias "MakeSureDirectoryPathExists" (ByVal _
    lpPath As String) As Long

Gruß
Nepumuk
Anzeige
AW: Nach einem kurzen Blick...
26.09.2019 13:15:21
Marcus
besten Danke Nepumuk
jetzt habe ich die erste Zeile verstanden
nur mault er jetzt bei == if makepath(strwurzel usw.
der kpl. Code
Sub machHyperlinksNurEingeblendete()
Dim lZeile As Long, lLetzteZeile As Long
Dim strWurzel As String, strVerzeichnis As String
'Wurzelverzeichnis festlegen
strWurzel = ActiveWorkbook.Path & "\"  '"C:\Users\papa\Desktop\"
'Verweis auf Tabellenblatt (evtl. anzupassen)
With ActiveSheet
'Letzte benutzte Zeile ermitteln
lLetzteZeile = .Range("A:A").Find("*", , , , xlByRows, xlPrevious).Row
'Schleife über alle Zeilen (unabhängig, ob ausgeblendet, oder nicht)
For lZeile = 7 To lLetzteZeile
'Nur eingeblendete Zeilen
If Not .Rows(lZeile).Hidden Then
'Verzeichnis, das angelegt werden soll
strVerzeichnis = CStr(.Cells(lZeile, 1).Value)
'Pfad anlegen
If MakePath(strWurzel & strVerzeichnis & "\") Then
'Hyperlink anlegen
ActiveSheet.Hyperlinks.Add Anchor:=.Cells(lZeile, 1), _
Address:=strWurzel & strVerzeichnis, _
ScreenTip:="Öffne " & strVerzeichnis, _
TextToDisplay:=strVerzeichnis
End If
End If
Next
End With
End Sub

Anzeige
AW: Nach einem kurzen Blick...
26.09.2019 13:56:14
Nepumuk
Hallo Marcus,
wie äußert sich das, Fehlermeldung, Programmabsturz … ?
Gruß
Nepumuk
AW: Nach einem kurzen Blick...
26.09.2019 13:59:47
Marcus
Hi nepumuk
er springt ins VBA und markiert den Wortlaut und führt das Makro nicht aus.
Ich finde nur keinen bezug von dem Makro zu der Umstellung auf 64 Bit?
Gruß
Marcus
AW: Nach einem kurzen Blick...
26.09.2019 14:15:23
Nepumuk
Hallo Marcus,
dazu kann ich nichts sagen, ich habe keine 64Bit - Version. Selbst Microsoft rät davon ab.
Gruß
Nepumuk
Anzeige
AW: Nach einem kurzen Blick...
26.09.2019 14:52:51
Marcus
wie kann ich Excel dazu zwingen das es im 32bit mode startet? geht das
AW: Nach einem kurzen Blick...
26.09.2019 14:58:04
Nepumuk
Hallo Marcus,
das geht nicht.
Gruß
Nepumuk
AW: Nach einem kurzen Blick...
26.09.2019 15:02:25
Marcus
habe ich irgendeine chance diesen Code zum laufen zu bekommen?

Option Explicit
Declare PtrSafe Function apiCreateFullPath Lib "imagehlp.dll" Alias _
"MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long
Sub machHyperlinksNurEingeblendete()
Dim lZeile As Long, lLetzteZeile As Long
Dim strWurzel As String, strVerzeichnis As String
'Wurzelverzeichnis festlegen
strWurzel = ActiveWorkbook.Path & "\"  '"C:\Users\papa\Desktop\"
'Verweis auf Tabellenblatt (evtl. anzupassen)
With ActiveSheet
'Letzte benutzte Zeile ermitteln
lLetzteZeile = .Range("A:A").Find("*", , , , xlByRows, xlPrevious).Row
'Schleife über alle Zeilen (unabhängig, ob ausgeblendet, oder nicht)
For lZeile = 7 To lLetzteZeile
'Nur eingeblendete Zeilen
If Not .Rows(lZeile).Hidden Then
'Verzeichnis, das angelegt werden soll
strVerzeichnis = CStr(.Cells(lZeile, 1).Value)
'Pfad anlegen
If MakePath(strWurzel & strVerzeichnis & "\") Then
'Hyperlink anlegen
ActiveSheet.Hyperlinks.Add Anchor:=.Cells(lZeile, 1), _
Address:=strWurzel & strVerzeichnis, _
ScreenTip:="Öffne " & strVerzeichnis, _
TextToDisplay:=strVerzeichnis
End If
End If
Next
End With
End Sub

jetzt mault er noch bei der Zeile if makepath usw. selbst wenn ich die durch MakeSureDirectoryPathExists ersetze:
kommt die Meldung fehler beim komilieren - sub oder function nicht definiert
Anzeige
AW: Nach einem kurzen Blick...
26.09.2019 15:11:04
Nepumuk
Hallo Markus,
teste mal:
Option Explicit

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

Sub machHyperlinksNurEingeblendete()
    Dim lZeile As Long, lLetzteZeile As Long
    Dim strWurzel As String, strVerzeichnis As String
    
    'Wurzelverzeichnis festlegen
    strWurzel = ActiveWorkbook.Path & "\" '"C:\Users\papa\Desktop\"
    
    'Verweis auf Tabellenblatt (evtl. anzupassen)
    With ActiveSheet
        
        'Letzte benutzte Zeile ermitteln
        lLetzteZeile = .Columns(1).Find("*", , , , xlByRows, xlPrevious).Row
        
        'Schleife über alle Zeilen (unabhängig, ob ausgeblendet, oder nicht)
        For lZeile = 7 To lLetzteZeile
            
            'Nur eingeblendete Zeilen
            If Not .Rows(lZeile).Hidden Then
                
                'Verzeichnis, das angelegt werden soll
                strVerzeichnis = CStr(.Cells(lZeile, 1).Value)
                
                'Pfad anlegen
                If MakeSureDirectoryPathExists(strWurzel & strVerzeichnis & "\") Then
                    
                    'Hyperlink anlegen
                    .Hyperlinks.Add Anchor:=.Cells(lZeile, 1), _
                        Address:=strWurzel & strVerzeichnis, _
                        ScreenTip:="Öffne " & strVerzeichnis, _
                        TextToDisplay:=strVerzeichnis
                End If
            End If
        Next
        
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Nach einem kurzen Blick...
26.09.2019 15:14:34
Marcus
danke danke danke
wo wohnst du ich bring dir BIER danke Danke Danke
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Code für 64-Bit Systeme aktualisieren


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Suche nach Declare-Anweisungen: Finde alle Declare-Anweisungen in deinem Code, die nicht PtrSafe deklariert sind.

  3. Aktualisiere die Declare-Anweisungen: Füge PtrSafe zur Declare-Anweisung hinzu. Beispiel:

    Declare PtrSafe Function MakeSureDirectoryPathExists Lib "imagehlp.dll" _
    Alias "MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long
  4. Ersetze Long durch LongPtr: Wenn du Pointer verwendest, ändere die Rückgabewerte von Long auf LongPtr.

  5. Überprüfe den Code auf Kompatibilität: Stelle sicher, dass der gesamte Code mit 64-Bit kompatibel ist.


Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: Wenn du die Fehlermeldung „Fehler beim Kompilieren: Der Code in diesem Projekt muss für die Verwendung auf 64-Bit-Systemen aktualisiert werden“ erhältst, überprüfe, ob alle Declare-Anweisungen PtrSafe enthalten.

  • Sub oder Function nicht definiert: Dies kann auftreten, wenn die Funktion, die du aufrufen möchtest, nicht als PtrSafe deklariert ist. Stelle sicher, dass alle externen Funktionen korrekt deklariert sind.


Alternative Methoden

  • Wechsel von 32-Bit auf 64-Bit: Du kannst deine Excel-Version auf 64-Bit umstellen, indem du die Installation von Office 2016 entsprechend anpasst. Dies kann jedoch bedeuten, dass du 32-Bit spezifische Add-Ins oder VBA-Codes anpassen musst.

  • VBA-Tools nutzen: Es gibt Tools und Add-Ins, die dir helfen können, deinen VBA-Code automatisch auf die 64-Bit-Version zu aktualisieren.


Praktische Beispiele

Hier ist ein Beispiel für die Aktualisierung eines VBA-Codes, der MakeSureDirectoryPathExists verwendet:

Option Explicit
Declare PtrSafe Function MakeSureDirectoryPathExists Lib "imagehlp.dll" Alias _
"MakeSureDirectoryPathExists" (ByVal lpPath As String) As Long

Sub machHyperlinksNurEingeblendete()
    Dim lZeile As Long, lLetzteZeile As Long
    Dim strWurzel As String, strVerzeichnis As String
    strWurzel = ActiveWorkbook.Path & "\"
    With ActiveSheet
        lLetzteZeile = .Range("A:A").Find("*", , , , xlByRows, xlPrevious).Row
        For lZeile = 7 To lLetzteZeile
            If Not .Rows(lZeile).Hidden Then
                strVerzeichnis = CStr(.Cells(lZeile, 1).Value)
                If MakeSureDirectoryPathExists(strWurzel & strVerzeichnis & "\") Then
                    ActiveSheet.Hyperlinks.Add Anchor:=.Cells(lZeile, 1), _
                    Address:=strWurzel & strVerzeichnis, _
                    ScreenTip:="Öffne " & strVerzeichnis, _
                    TextToDisplay:=strVerzeichnis
                End If
            End If
        Next
    End With
End Sub

Tipps für Profis

  • Verwende LongPtr: In deiner Codebasis solltest du LongPtr für alle Variablen verwenden, die Zeiger auf 64-Bit-Systemen darstellen.
  • Testen: Teste deinen aktualisierten Code gründlich, um sicherzustellen, dass er unter 64-Bit umgebungen fehlerfrei funktioniert.
  • Aktualisiere regelmäßig: Halte deinen Code aktuell, um zukünftige Kompatibilitätsprobleme zu vermeiden.

FAQ: Häufige Fragen

1. Wie erkenne ich, ob mein Code 64-Bit-kompatibel ist?
Achte darauf, dass alle Declare-Anweisungen das PtrSafe-Schlüsselwort enthalten und dass die Datentypen korrekt verwendet werden.

2. Was mache ich, wenn ich weiterhin Fehlermeldungen erhalte?
Überprüfe alle Declare-Anweisungen und stelle sicher, dass alle externen Funktionen korrekt deklariert sind. Es kann auch hilfreich sein, den Code in einer 32-Bit-Umgebung zu testen, um die Unterschiede zu erkennen.

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