GetFileName
Diese Funktion ist in folgenden Access-Versionen verfügbar: 2000, 2002, 2003, 2007, 2010
Zeigt den Office-Dateiauswahl-Dialog an (ohne das ein Verweis auf die Office-Bibliothek erforderlich ist).
Function GetFileName(hWndOwner As Long, AppName As String, DlgTitle As String, OpenTitle As String, File As String, InitialDir As String, Filter As String, FilterIndex As Long, View As Long, flags As Long, fOpen As Boolean) As Long
| hWndOwner |
|
Zeiger auf das Fenster, das den Dialog gestartet hat |
| AppName |
|
??? |
| DlgTitle |
|
Dialog-Titel, Beschriftung der Titelzeile |
| OpenTitle |
|
Beschriftung des öffnen-Buttons |
| File |
|
Gibt Pfad und Namen der ausgewählten Datei(en) oder Ordner zurück |
| InitialDir |
|
Startverzeichnis |
| Filter |
|
Liste mit Filtern für den Dateityp. Einzelne Einträge sind durch das Pipe-Zeichen ("|") von einander getrennt. |
| FilterIndex |
|
Nummer des Filters, der bei der Anzeige aktiv ist (0-basiert) |
| View |
|
0: Detailansicht 1: Vorschauansicht 2: Eigenschaften 3: Liste 4: Miniaturansicht 5: Große Symbole 6: Kleine Symbole |
| flags |
|
Als Auswahl für diesen Parameter können folgende Werte addiert werden: 4: Set Current Dir 8: Mehrfachauswahl möglich 32: Ordnerauswahldialog 64: Wert im Parameter "View" berücksichtigen |
| fOpen |
|
True: öffnenschaltfläche öffnet ausgewählten Ordner False: öffnenschaltfläche öffnet ausgewählten Ordner nicht |
0, wenn eine Datei ausgewählt wurde.
-302, wenn der Dialog (ohne Auswahl) abgebrochen wurde.
Dim hwndOwner As Long
Dim strAppName As String
Dim strDlgTitle As String
Dim strOpenTitle As String
Dim strFile As String
Dim strInitialDir As String
Dim strFilter As String
Dim lngFilterIndex As Long
Dim lngView As Long
Dim lngflags As Long
Dim fOpen As Boolean
Dim intI As Integer
'Werte übernehmen
hwndOwner = Me.Hwnd
strDlgTitle = Nz(Me!txtDialogTitel, "")
strOpenTitle = Nz(Me!txtOpenTitel, "")
strFile = ""
strInitialDir = Nz(Me!txtStartVerzeichnis, "")
strFilter = Nz(Me!txtFilter, "")
lngFilterIndex = Nz(Me!txtFilterIndex, 0)
lngView = Nz(Me!txtView, 0)
lngflags = Nz(Me!txtFlags, 0)
fOpen = Me!chkOpen
WizHook.Key = 51488399
If WizHook.GetFileName(hwndOwner, strAppName, strDlgTitle, strOpenTitle, _
strFile, strInitialDir, strFilter, lngFilterIndex, lngView, _
lngflags, fOpen) = 0 Then
If InStr(strFile, vbTab) = 0 Then
MsgBox strFile, vbInformation, "Auswahl:"
Else
intI = 1
While InStr(intI + 1, strFile, vbTab) > 0
MsgBox Mid$(strFile, intI + 1, InStr(intI + 1, strFile, vbTab) - intI)
intI = InStr(intI + 1, strFile, vbTab)
Wend
MsgBox Right$(strFile, Len(strFile) - intI)
End If
End If
Wenn kein Startverzeichnis angegeben wird, beginnt der Dialog im aktuellen Verzeichnis (CurDir).
Wenn das Startverzeichnis nicht existiert, beginnt der Dialog im Ordner "Eigene Dateien".
Wenn kein Filter übergeben wird, verwendet der Dialog "Alle Dateien (*.*). Wenn ein FilterIndex angegeben wird, der nicht vorhanden ist, wird der erste Filter verwendet.
Wenn ein Dialog zur Ordnerauswahl geöffnet wird, muss für den Parameter "fOpen" der Wert "True" übergeben werden. Sonst kann kein Ordner ausgewählt werden.
Die Auswahl für den Parameter "View" ist nur wirksam, wenn bei "Flags" der Wert 64 (View berücksichtigen) verwendet wird.
Das Kennzeichen "Mehrfachauswahl" wird nur berücksichtigt, wenn der Parameter "fOpen" den Wert "True" hat.
Mehrere Dateien werden durch "Tab" getrennt zurückgegeben.
| Weitere Hinweise (von Wolfgang Jarecki) |
Eine Beschränkung des "WizHook"-Objektes (und damit dieser Funktion) liegt darin, dass von den ausgewählten Dateien im Rückgabewert höchstens 4094 (= 2^12 - 2) Zeichen enthalten sind; da bei jeder Datei der gesamte (immer gleiche) Ordnerpfad wiederholt wird, wird diese Zeichenlänge auch leicht überschritten, wenn der Ordnerpfad vielleicht selbst schon 100 Zeichen lang ist und 40 Dateien ausgewählt werden.
Der zurückgegebene String beinhaltet dann nur die ersten 4094 Zeichen und danach den Text " 7" & <OpenTitle>.
Deshalb sollte vor der Weiterverarbeitung des Rückgabewertes immer überprüft werden, ob er mehr als 4094 Zeichen enthält. In diesem Fall sollte darauf hingewiesen werden, dass nicht alle ausgewählten Dateien erfasst werden konnten, und die Weiterverarbeitung abgebrochen werden. Denn in der Regel ist dann die letzte Datei irgendwo abgeschnitten worden, was bei der Weiterverarbeitung einen Fehler auslösen dürfte.
Bei der Dateiauswahl mit der API-Funktion "GetOpenFileName" besteht diese Beschränkung übrigens nicht. Die mögliche Zeichenzahl der Rückgabe wird beim Aufruf der Funktion selbst festgelegt und wesentlich "sparsamer" verwendet, weil bei der Mehrfachauswahl von Dateien der Ordnerpfad nur einmal wiedergegeben wird. Allerdings erfordert die Weiterverarbeitung des Rückgabewertes mehr Code, weil seine Struktur bei der Auswahl von nur einer Datei anders ist als bei der Auswahl mehrerer Dateien. Ich kann Ihnen hierzu gerne einen Beispiel-Code senden.
Die API-Funktion bietet außerdem (im Gegensatz zu anderen Datei-Auswahl-Dialogen) die Möglichkeit, mit der Flags-Komponente "OFN_NODEREFERENCELINKS" bei einer Datei-Verknüpfung nicht das Ziel der Verknüpfung, sondern die Verknüpfung selbst zurückzugeben (*.lnk), wenn das gewünscht wird.