Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
592to596
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
592to596
592to596
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

FileDialog

FileDialog
04.04.2005 22:21:34
Lars
Guten Abend,
ich benutze öfter den Filedialog, klappt auch super zur Auswahl von Dateien
nur Ordner auswählen gelingt nicht. In der Hilfe ist dzau kein Beispiel zu finden.
Kann mir jemand ein Beispiel zur Ordnerauswahl geben?
Grüße Lars

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

Betreff
Datum
Anwender
Anzeige
AW: FileDialog
04.04.2005 22:50:54
Ramses
Hallo
eine einfache Variante für alle Office Versionen

Option Explicit
'############################################################################################'
' Die folgenden Makros durchsuchen einen Ordner und seine Unterordner '
' Modified by Ramses '
' Der Code besteht zu TeilFragmenten aus Forumsbeiträgen
' Die einzelnen Verfasser sind mir leider nicht mehr bekannt. '
'############################################################################################'
'############################################################################################'
'Dieser Bereich kann entfallen, wenn der Variable 'Laufwerk' ein fester Wert zugewiesen wird.'
Public Type BROWSEINFO '
hOwner As Long '
pidlRoot As Long '
pszDisplayName As String '
lpszTitle As String '
ulFlags As Long '
lpfn As Long '
lParam As Long '
iImage As Long '
End Type '
Declare

Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Declare 

Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Function GetDirectory(Msg) As String
Dim myInfo As BROWSEINFO
Dim mypath As String
Dim Root As Long, ID As Long, pos As Integer
With myInfo
.pidlRoot = 0&
.lpszTitle = Msg
.ulFlags = &H1
End With
ID = SHBrowseForFolder(myInfo)
mypath = Space$(512)
Root = SHGetPathFromIDList(ByVal ID, ByVal mypath)
If Root Then
pos = InStr(mypath, Chr$(0))
GetDirectory = Left(mypath, pos - 1)
Else
GetDirectory = ""
End If
End Function


Sub Select_Path()
Dim Msg As String, mypath As String
Msg = "Wählen Sie ein Verzeichnis aus," & Chr(13) & "dessen Inhalt angezeigt werden soll:"
mypath = GetDirectory(Msg)
If Len(mypath) > 0 Then
MsgBox "Sie haben das Verzeichnis: " & mypath & " ausgewählt"
Else
MsgBox "Nichts ausgewählt"
End If
End Sub

Und hier die Variante speziell für Office XP und höher


Sub A_Pfad_wählen()
Dim i As Integer, y As Integer, totFiles As Integer, Qe As Integer
Dim Sind As Long
Dim wks As Worksheet
Dim gefFile As String
Dim Suchbegriff As String, Suchpfad As String
Dim oldStatus As Variant
'Neue Funktion erst ab Office XP verwendbar
'bzw. auch unter 2000 wenn ein Verweis auf die Office 10 Library
'gesetzt werden kann.
'Öffnet einen Dialog indem der Pfad elegant wie im normalen
'Datei-Dialog gewählt werden kann.
Dim Suchdialog As FileDialog
Set Suchdialog = Application.FileDialog(msoFileDialogFolderPicker)
If Application.Version < 10 Then
Qe = MsgBox("Diese Datei bzw. dieser Suchdialog ist erst ab EXCEL XP möglich!", vbCritical + vbOKOnly, "Tut mir leid...")
Exit Sub
End If
Application.ScreenUpdating = False
oldStatus = Application.DisplayStatusBar
Application.DisplayStatusBar = True
'Hier wird der neue FolderPickerDialog aufgerufen
With Suchdialog
.Title = "Bitte wählen Sie ein Verzeichnis aus"
'Environ(25) ermittelt den Aktuellen Userpfad
.InitialFileName = Environ(25) & "\Eigene Dateien\"
.ButtonName = "Auswahl übernehmen"
.Show
If .SelectedItems.count = 0 Then
MsgBox "Sie haben keine Auswahl getroffen", vbInformation
Set Suchdialog = Nothing
Exit Sub
Else
For Sind = 1 To .SelectedItems.count
Suchpfad = Suchpfad & .SelectedItems(Sind) & vbCrLf
Next Sind
End If
End With
MsgBox ("Der Suchpfad den Sie gewählt haben lautet: " & Suchpfad)
End Sub


Gruss Rainer
Anzeige
AW: FileDialog
04.04.2005 23:14:12
Lars
Hallo Rainer,
danke funktioniert. Wenn Folderpicker gewählt ist geht Multiselect ja nicht.
Wozu ist denn da die Schleife?
Grüße Lars
AW: FileDialog
04.04.2005 23:17:06
Ramses
Hallo
"...Wozu ist denn da die Schleife?..."
Das musst du Billy fragen :-)
Ohne die Schleife kannst du nicht rausfinden, welcher Eintrag gewählt wurde ;-)
Gruss Rainer
AW: FileDialog
04.04.2005 23:38:19
K.Rola
Hallo Rainer,
Option Explicit
Sub FileDialog_FolderPicker()
Dim strFolder As String
With Application.FileDialog(4)
.InitialFileName = "C:\"
.Title = "Trau dich!"
.ButtonName = "Test"
.InitialView = 2
If .Show = -1 Then
strFolder = .SelectedItems(1)
MsgBox strFolder
Else
MsgBox "Nix gewählt!"
End If
End With
End Sub

Gruß K.Rola

Der Fleiß ist die Wurzel aller Häßlichkeit.

Oscar Wilde


Anzeige
AW: FileDialog
05.04.2005 00:18:16
Lars
Hallo K.Rola,
danke, das funktioniert gut.
Grüße Lars
AW: FileDialog
06.04.2005 15:51:29
Rolf Beißner
Hallo K.Rola,
bei
.InitialFileName = "Desktop"
wird irgendwas angezeigt - nur kein Desktop.
Gibst du mir bitte einen Tipp, wie's geht?!
Herzliche Grüße
Rolf
AW: FileDialog
06.04.2005 16:25:37
K.Rola
Hallo,
verwende den Code so wie gepostet und klick den Desktop an, dann hast du den
korrekten Pfad.
Gruß K.Rola
geht!
06.04.2005 16:54:27
Rolf Beißner
vielen lieben Dank + herzliche Grüße
Rolf
AW: geht!
06.04.2005 17:19:48
K.Rola
Hallo,
geht zwar, kann aber auf jedem PC anders sein!
Gruß K.Rola
AW: geht!
06.04.2005 20:30:23
Rolf Beißner
Hallo K.Rola,
der PC scheint nicht die einzige Variable zu sein;
die Folderbezeichnung ist offenbar auch verfahrensabhängig:
Bei Nutzung von FileDialog komme ich z.B. mit "Arbeitsplatz" an's Ziel -
bei deiner Shell.BrowseForFolder-Funktion führt so ein Monster wie
"::{20X04XXX-3XXX-1069-X2X8-08002X30309X}" zum gleichen Ergebnis.
Nochmals danke + schönen Abend
Rolf
Anzeige
AW: geht!
06.04.2005 21:00:36
K.Rola
Hallo,
oder man nutzt die API SHGetSpecialFolderLocation, dann ist es universell.
Gruß K.Rola
API
07.04.2005 08:38:57
Rolf Beißner
Hallo K.Rola,
du hast eben immer noch einen Pfeil im Köcher!
Mit dem ganzen API-Sch... kann ich nicht viel anfangen -
ist mir zu kompliziert + zu unelegant.
Und dass die meisten Probleme mit VBA-Mitteln lösbar sind,
demonstrierst du ja ständig sehr eindrucksvoll.
Herzliche Grüße
Rolf
AW: API
07.04.2005 11:33:17
K.Rola
Hallo,
stimmt, meist gibt es auch eine andere Möglichkeit als API:
Option Explicit
Sub Special_Folder_Desktop()
Dim strDesktop As String, objSH As Object
Set objSH = CreateObject("WScript.Shell")
strDesktop = objSH.SpecialFolders("Desktop")
MsgBox strDesktop
End Sub

Gruß K.Rola
Anzeige
Quod erat demonstrandum hG Rolf o.T.
07.04.2005 12:16:22
Rolf Beißner
..

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige