Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1844to1848
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code für 16 und 32bit in einem?

Code für 16 und 32bit in einem?
03.09.2021 17:55:43
Marcus
Hallo zusammen,
jetzt gleich das nächste Problem.
Arbeit 16bit
Zuhause 32bit
wie kann ich das mit einem Code machen das es auf beiden Bit-Varianten läuft?
der 16Bit code:
Option Explicit
Private Declare

Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub Ordner_erstellen()
Dim Zeilen As Long, Pfad As String, FullPfad As String, i As Long
Zeilen = Range("A65536").End(xlUp).Row
Pfad = Range("B1")
For i = 1 To Zeilen
FullPfad = Pfad & Cells(i, 1) & "\" & Range("C1") & "\"
Call MakeSureDirectoryPathExists(FullPfad)
Next i
End 

Sub
mein Ergebnis nachdem ich gesucht habe:
' 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

Sub Ordner_erstellen()
Dim Zeilen As Long, Pfad As String, FullPfad As String, i As Long
Zeilen = Range("A65536").End(xlUp).Row
Pfad = Range("B1")
For i = 1 To Zeilen
FullPfad = Pfad & Cells(i, 1) & "\" & Range("C1") & "\"
Call MakeSureDirectoryPathExists(FullPfad)
Next i
End Sub
Irgendwie läuft nix.
Jemand einen Tipp bitte?
Danke
Marcus

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code für 16 und 32bit in einem?
03.09.2021 18:58:59
Daniel
Hi
die Simpellösung für diesen Fall:
verzichte auf dll-Zugriff und erstelle die Unterordner mit MkDir (make Directory).
weil man damit immer nur ein Unterverzeichnis in einem bereits bestehenden Ordner erstellen kann, geht man sicherheitshalber mit einer Schleife über die angegebenen Unterordner und erstellt jeden einzeln, falls erforderlich:
diese Sub einem allgemeinen Modul hinzufügen:

Sub Pfad_Erstellen(Pfad As String)
Dim arrPfad
Dim i As Long
Dim TeilPfad As String
arrPfad = Split(Pfad, "\")
TeilPfad = arrPfad(0)
For i = 1 To UBound(arrPfad)
TeilPfad = TeilPfad & "\" & arrPfad(i)
If Dir(TeilPfad, vbDirectory) = "" Then MkDir TeilPfad
Next
End Sub
und dann mit diesem Befehl ausführen.

Call Pfad_Erstellen("C:\Order1\Ordner2\Ordner3")
Gruß Daniel
Anzeige
AW: Code für 16 und 32bit in einem?
03.09.2021 20:53:45
Marcus
@all
danke für die schnelle Hilfe.
Der Code von mir, sollte so in der Reihenfolge funktionieren wie beschrieben.
A1 = der Ordnername
B1 = der Speicherpfad
C2 = der Name des Unterordners
Hintergrund:
Die Schiessergebnisse vom Tunier müssen in verschiedene Haupt-Verzeichnisse, Die Bilder von den Scheiben in den jeweiligen Unterordner. Daher wäre es super wenn das 16Bit Teil auch unter 32Bit läuft.
Die VBA Erklärung, mit dem Link - da blicke ich nicht durch.
Kann mir jemand das erklären?
Am besten wäre ein Code der mit beiden arbeiten kann
Gruß
Marcus
Anzeige
AW: Code für 16 und 32bit in einem?
04.09.2021 00:19:41
volti
Hallo,
ich schließe mich der Feststellung von Ralf an und glaube eher nicht, dass bei Euch auf der Arbeit noch 16-Bit-Systeme aus DOS und Win3x-Zeiten eingesetzt werden.
Für eine Unterscheidung zwischen 32 und 64-Bit probiere mal nachfolgenden Code, der den Compilerschalter VBA7 anstelle von Win64 verwendet. In VBA7 gibt es keinen Unterschied dieser Funktion zwischen 32 und 64-Bit. Es gilt lediglich ggü. dem alten VBA6-Excel die Verwendung des Schlüsselwortes PtrSafe.
Zu Deinem etwas verwirrenden Code:
Im ersten Teil deklarierst Du nur VBA6 und nicht VBA7, was auf 64-Bit-Rechnern gleich zum Fehler führt.
Im zweiten Teil deklarierst Du korrekterweise die Alias-Funktion apiCreateFullPath, die Du aber in Deinem Code überhaupt nicht verwendest.
Hast Du wahrscheinlich irgendwo im Netz gefunden, aber den Hintergrund nicht verstanden.
Tipp: M.E. sollte auch eher die modernere Function SHCreateDirectoryEx für diese Aufgabe herangezogen werden.
Code:

[Cc]

Option Explicit #If VBA7 Then Private Declare PtrSafe Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _ ByVal lpPath As String) As Long #Else Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _ ByVal lpPath As String) As Long #End If Sub Ordner_erstellen() Dim Zeilen As Long, Pfad As String, FullPfad As String, i As Long Zeilen = Range("A65536").End(xlUp).Row Pfad = Range("B1") For i = 1 To Zeilen FullPfad = Pfad & Cells(i, 1) & "\" & Range("C1") & "\" Call MakeSureDirectoryPathExists(FullPfad) Next i End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Code für 16 und 32bit in einem?
04.09.2021 11:23:55
Marcus
ich meinte natürlich 32Bit Version.
Ein Traum es funktioniert endlich zuhause - geht der gleiche Code auch bei 32bit?
vielen Dank für die Zeit und Erklärung
Marcus
AW: Code für 16 und 32bit in einem?
04.09.2021 13:08:30
volti
Hallo Marcus,
kann ich nicht testen, habe nur 64Bit....
Aber ich bin mir sicher, dass es auch dort funktioniert.
VG KH
AW: Code für 16 und 32bit in einem?
04.09.2021 21:56:31
mumpel
Unter Windows 64-bit funktioniert der Code auf jeden Fall (egal ob 64-bit-Office oder 32-bit-Office), und unter Office 2016 und neuer müsste es auch funktionieren. Meinen Test zufolge. Und Windows 32-bit ist ohnehin selten, die meisten PCs dürften mit 64-bit-Windows laufen (ein 32-bit-Rechner ist mir schon ewig nicht mehr begegnet).
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige