Hallo,
wie du sicher festgestellt hast, ist die Sub so angelegt,
dass sie mit dem Pfad zu den Textdateien als Parameter
aufgerufen wird. Wenn du den Pfad nicht im Code festlegen
kannst oder willst, weil es z. B. mehrere Möglichkeiten
gibt und die Auswahl dem Benutzer überlassen werden soll,
sind von einfach bis kompliziert mehrere Möglichkeiten
denkbar.
Private Sub TextDateienEinlesen_Aufrufen()
Dim vntOrdner As Variant, strPrompt As String, _
strTitel As String
strPrompt = "Geben Sie den Pfad ein:"
strTitel = "Textdateien einlesen"
vntOrdner = Application.InputBox (Prompt:=strPrompt, _
Title:=strTitel, Type:=2)
If Not vntOrdner = False Then
TextDateienEinlesen CStr(vntOrdner)
End If
End Sub
Das ist eine einfache Möglichkeit für versierte Anwender,
denen es keine Schwierigkeiten bereitet, den Zielpfad
manuell einzugeben. Für DAUs (Dümmster Anzunehmender User)
:-) ist das eher nix. Damit es ein bisschen professionell
aussieht, wäre sowieso der Windows-Standarddialog zur
Ordnerauswahl die beste Lösung, aber das geht schon ein
bisschen ans Eingemachte. Weil ich natürlich nicht alle
API-Funktionen auswendig kann, habe ich dafür ein bisschen
gegoogelt und übernehme für das Ergebnis keine Garantie,
aber ausprobiert habe ich es natürlich.
Füge ein Modul ein, in das folgender Code kommt:
Private Type BrowseInfo
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
Const BIF_RETURNONLYFSDIRS = 1
Const MAX_PATH = 260
Private Declare Sub CoTaskMemFree Lib "ole32.dll" _
(ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias _
"lstrcatA" (ByVal lpString1 As String, ByVal lpString2 _
As String) As Long
Private Declare Function SHBrowseForFolder Lib _
"shell32" (lpbi As BrowseInfo) As Long
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal ClassName As String, ByVal WindowName _
As String) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" _
(ByVal pidList As Long, ByVal lpBuffer As String) As Long
Public Function vntOrdner() As Variant
Dim iNull As Integer, lpIDList As Long, sPath As String, _
udtBI As BrowseInfo
vntOrdner = False
With udtBI
.hWndOwner = FindWindow(vbNullString, Application.Caption)
.lpszTitle = lstrcat("Ordner für Textdateien auswählen:", "")
.ulFlags = BIF_RETURNONLYFSDIRS
End With
lpIDList = SHBrowseForFolder(udtBI)
If lpIDList Then
sPath = String$(MAX_PATH, 0)
SHGetPathFromIDList lpIDList, sPath
CoTaskMemFree lpIDList
iNull = InStr(sPath, vbNullChar)
If iNull Then
vntOrdner = Left$(sPath, iNull - 1)
End If
End If
End Function
Die Function vntOrdner gibt False zurück, wenn der Benutzer
auf Abbrechen klickt, ansonsten den ausgewählten Ordner mit
komplettem Pfad.
Gruß
|