Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
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

Verzeichnis auswählen und Auflisten

Verzeichnis auswählen und Auflisten
17.12.2020 13:57:14
Mirko
Hallo ich bin auf der Suche nach einem Makro.
Ich möchte auf einen Button klicken. Damit muss sich dann ein Makro ausführen, dass:
1) sich ein Auswahlfenster öffnet, das wie folgt aussieht:
2) alle sich in dem ausgewählten Ordner befindlichen Dateien
in ein Fest zu gewiesene Tabelle auflistet.
mehr nicht.
habe einige gefunden nur die Auswahlmasken sind unzureichend.
Ich arbeite hier in einer Cloud und muss das o.g. Auswahlmöglichkeit haben. das unten aufgeführte BrowseForFolder reicht nicht. ich brauche das größere Fenster...
Vlt hat ja da einer was
Private Function GetFolder() As String
'Funktion um den Ordner auszuwählen
Dim objShell As Object
Dim strPath As String
Set objShell = CreateObject("Shell.Application")
   Set varFolder = objShell.BrowseForFolder(0, "Folder", &H4000, 17)
If varFolder Is Nothing Then
Set varFolder = Nothing
Set objShell = Nothing
Exit Function
End If
GetFolder = varFolder.Self.Path
Set objShell = Nothing
End Function
das reicht nicht aus

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verzeichnis auswählen und Auflisten
17.12.2020 14:36:06
Mirko
Hi Hajo,
hatte ich schon gefunden läft bei meiner Office 354 64 Bit aber nicht...
der hat ein Problem mit dem
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As InfoT) As Long
Private Declare Function CoTaskMemFree Lib "ole32" (ByVal hMem As Long) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpStr1 As String, ByVal lpStr2 As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pList As Long, ByVal lpBuffer As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassname As String, ByVal lpWindowName As String) As Long
Anzeige
AW: Verzeichnis auswählen und Auflisten
17.12.2020 14:58:04
volti
Hallo Mirko,
die richtige Angabe der Declares für 64 Bit ist schnell angepasst.
Möglicherweise sind im Code noch Umstellungen z.B. von Handles nötig.
Probiere erst mal hiermit, vielleicht läuft's ja schon:
Code:
[Cc]

Private Declare PtrSafe Function lstrcat Lib "kernel32" Alias "lstrcatA" ( _ ByVal lpString1 As String, _ ByVal lpString2 As String) As LongPtr Private Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" Alias "SHBrowseForFolderA" ( _ lpBrowseInfo As BROWSEINFO) As LongPtr Private Declare PtrSafe Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" ( _ ByVal pidl As LongPtr, _ ByVal pszPath As String) As Long Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As LongPtr Private Declare PtrSafe Function CoTaskMemFree Lib "ole32" ( _ ByVal hMem As LongPtr) As Long Private Type BROWSEINFO hOwner As LongPtr pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As LongPtr lParam As LongPtr iImage As Long End Type

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

Anzeige
AW: Verzeichnis auswählen und Auflisten
17.12.2020 15:04:47
Mirko
Mega. Vielen Dank.
Aber ich bekomm es nicht gebacken den Code
Function GetAOrdner() As String
Dim xl As InfoT, IDList As Long, RVal As Long, FolderName As String
With xl
.hwnd = FindWindow("xlmain", vbNullString)
'        .hwnd = FindWindow("", "Auswahl")  ' Userform Auswahl
.Title = lstrcat("Bitte wählen Sie ein Verzeichnis", "")
.Flags = 1
End With
IDList = SHBrowseForFolder(xl)
If IDList  0 Then
FolderName = Space(256)
RVal = SHGetPathFromIDList(IDList, FolderName)
CoTaskMemFree (IDList)
FolderName = Trim(FolderName)
FolderName = Left(FolderName, Len(FolderName) - 1)
End If
GetAOrdner = FolderName
End Function
auf deine Variablen anzupassen. Dazu ist mein VBA zu schlecht. Vor allem bei So kryptischen Bezeichnungen...
Anzeige
AW: Verzeichnis auswählen und Auflisten
17.12.2020 15:23:21
volti
Hallo Mirko,
hier mal das Ganze an 64-Bit angepasst. Aber ich lese gerade, Du möchtest die Großversion mit den Dateien drin. Wäre da nicht eher GetOpenFileName die richtige Wahl?
Wenn dieses hier nicht das gewünschte ist, melde Dich noch mal...
Code:
[Cc][+][-]

Private Declare PtrSafe Function lstrcat Lib "kernel32" Alias "lstrcatA" ( _ ByVal lpString1 As String, _ ByVal lpString2 As String) As LongPtr Private Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" ( _ lpBrowseInfo As InfoT) As LongPtr Private Declare PtrSafe Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" ( _ ByVal pidl As LongPtr, _ ByVal pszPath As String) As Long Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As LongPtr Private Declare PtrSafe Function CoTaskMemFree Lib "ole32" ( _ ByVal hMem As LongPtr) As Long Private Type InfoT hwnd As LongPtr Root As Long DisplayName As String Title As String Flags As Long FName As LongPtr lParam As LongPtr Image As Long End Type Function GetAOrdner() As String Dim xl As InfoT, IDList As LongPtr, RVal As Long, FolderName As String With xl .hwnd = Application.hwnd .Title = "Bitte wählen Sie ein Verzeichnis" .Flags = 1 End With IDList = SHBrowseForFolder(xl) If IDList <> 0 Then FolderName = Space(256) RVal = SHGetPathFromIDList(IDList, FolderName) CoTaskMemFree (IDList) FolderName = Trim(FolderName) FolderName = Left(FolderName, Len(FolderName) - 1) End If GetAOrdner = FolderName End Function

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

Anzeige
AW: Verzeichnis auswählen und Auflisten
17.12.2020 15:37:31
Hajo:Zi
Hallo Kal-Heinz,
Danke für die Information.
Ich arbeite es ein. Zum Testen muss ich erst noch ein virtuelles System mit Excel 64-bit erstellen.
Gruß Hajo
AW: Verzeichnis auswählen und Auflisten
17.12.2020 16:03:02
volti
Gerne Hajo,
und viel Erfolg beim Einarbeiten...
Hab noch mal etwas weiter aufgeräumt. Die Aliase weg und das FindWindow zum Ermitteln des Handle können weg.
Code:
[Cc][+][-]

Private Declare PtrSafe Function SHBrowseForFolderA Lib "shell32.dll" ( _ lpBrowseInfo As InfoT) As LongPtr Private Declare PtrSafe Function SHGetPathFromIDListA Lib "shell32.dll" ( _ ByVal pidl As LongPtr, ByVal pszPath As String) As Long Private Declare PtrSafe Function CoTaskMemFree Lib "ole32" ( _ ByVal hMem As LongPtr) As Long Private Type InfoT hwnd As LongPtr Root As Long DisplayName As String Title As String Flags As Long FName As LongPtr lParam As LongPtr Image As Long End Type Function GetAOrdner() As String Dim xl As InfoT, IDList As LongPtr, RVal As Long, FolderName As String With xl .hwnd = Application.hwnd .Title = "Bitte wählen Sie ein Verzeichnis!" .Flags = 1 End With IDList = SHBrowseForFolderA(xl) If IDList <> 0 Then FolderName = Space(256) RVal = SHGetPathFromIDListA(IDList, FolderName) CoTaskMemFree (IDList) FolderName = Trim(FolderName) FolderName = Left(FolderName, Len(FolderName) - 1) End If GetAOrdner = FolderName End Function

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

Anzeige
AW: Verzeichnis auswählen und Auflisten
17.12.2020 18:05:17
Hajo:Zi
Hallo karl-Heinz,
in die erste Datei habe ich es eingearbeitet und es läuft unter 32 und 64-bit.
Ich muss mich mal morgen dran machen alle Dateien zu ändern.
Vielen Dank für Deinen Einsatz.
Gruß Hajo
AW: Verzeichnis auswählen und Auflisten
18.12.2020 08:30:36
Mirko
Also Ihr seid Top.
Womit ich nur Probleme habe.
Ich hätte das gerne alles in einem open source.
Ich sehe hier ja nciht wirklich was passiert.
Die UserForm würde ich mir auch Sparen wollen.
Und ich würde gerne keine neue Tabelle immer dafür anlegen wollen.
Vlt habt ihr ja da noch einen Tip :) ?
lg
Anzeige
AW: Verzeichnis auswählen und Auflisten
18.12.2020 08:39:06
Hajo:Zi
Der Code ist öffentlich, da muss nichts an dere Datei geändert werden.
Wikipedia
Open Source (aus englisch open source, wörtlich offene Quelle) wird Software bezeichnet, deren Quelltext öffentlich 
Ohne UserForm musst Du selber machen, da Dir bekannt ist welches Verzeichnbis, was ausgelesen werden soll, welche Dateien und wo abgelegt werden soll.
Viel Erfolg.
AW: Verzeichnis auswählen und Auflisten
18.12.2020 09:08:52
volti
Hi Mirko,
wenn Du alle Dateien aus Ordner und Unterordner in einer Excelliste aufgelistet haben möchtest, kannst Du u.a. Makro aus meiner Bastelkiste versuchen.
Ggf. in Verbindung mit dem Ordnerwählen-Dialog.
Schau mal, ob es für Dich passt...
Code:
[Cc][+][-]

Option Explicit Sub FileSearchList() 'Auflisten von Dateien aus Ordner und Unterordner Dim OutZeile As Long, sArr() As String, sPath As String sPath = "D:&bsol;Pictures" 'Pfad <<< anpassen >>>> FileOut OutZeile, sArr, CreateObject("scripting.filesystemobject").GetFolder(sPath) With ThisWorkbook.Sheets("Dateien") 'Ausgabeblatt <<< anpassen >>>> .Cells.ClearContents .Cells(1, 1).Resize(1, 4).Value = Split("Pfad Dateiname Datum, Größe") .Cells(2, 1).Resize(OutZeile, 4).Value = Application.Transpose(sArr()) End With MsgBox OutZeile & " Dateien gefunden!", vbInformation, "Dateisuche" End Sub Sub FileOut(i As Long, sArr, oPath As Object) Dim oFile As Object, oDir As Object, Obj As Variant On Error Resume Next For Each oFile In oPath.Files 'Ordner durchsuchen If Err = 0 Then With oFile Err = 0 ReDim Preserve sArr(3, i) DoEvents sArr(0, i) = Replace(.Path, "&bsol;" & .Name, "") sArr(1, i) = .Name 'Dateinamen im Direktfenster ausgeben sArr(2, i) = FileDateTime(.Path) sArr(3, i) = .Size i = i + 1 End With End If Next For Each oDir In oPath.Subfolders 'Unterordner durchsuchen Obj = FileDateTime(oDir) FileOut i, sArr, oDir Next End Sub

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

Anzeige
AW: Verzeichnis auswählen und Auflisten
18.12.2020 08:41:20
Mirko
Ich muss mich nochmal korrigieren.
Habe natürlich den Code gefunden :).
Aber ich habte die Userform (inkl. code) und das Modul in eine andere Arbeitsmappe exportiert.
Diese hat Probleme mit der Variable
Dim LogFile As TextStream
der kennt TextStream nicht?
AW: Verzeichnis auswählen und Auflisten
18.12.2020 08:44:42
Hajo:Zi
nicht den Hinweis im Code bei UserForm bzw. in der Tabelle beachtet.
'- für dieses Beispiel muß im VBA Editor unter Extra, Verweise Microsoft Scripting Runtime aktiviert werden
Gruß Hajo
AW: Verzeichnis auswählen und Auflisten
18.12.2020 09:14:54
Mirko
Ok habe ich hinbekommen...
Aber dein VBA Text ist mir tatsächlich zu hoch.
Habe deinen Startbutton in meine Tabelle "Input" eingefügt und hier soll er auch die Dateinamen etc. reinschreiben.
Ab Zeile 3.....
Anzeige
AW: Verzeichnis auswählen und Auflisten
18.12.2020 10:20:48
Mirko
ok jetzt hab ich es :) DANKE: TOLLER CODE

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige