Datei zum Öffnen auswählen |
|
|||||||||||||||||||||
Möchte man aus einem Makro heraus eine beliebige Datei öffnen und dem Benutzer dabei die Möglichkeit bieten, das Laufwerk, das Verzeichnis und den Dateinamen selber festzulegen, steht eigentlich nur eine Funktion zur Verfügung: Das Word-interne Dialogfeld Dialogs(wdDialogsFileOpen) (siehe wd-Konstanten der Dialogfelder). Dieses Dialogsfeld besitzt aber den Nachteil, dass nur vordefinierte Formattypen ausgewählt werden können. Möchte man z.B. ein Dialogfenster ähnlich dem der VBAIDE zum Import eines Moduls oder Userform verwenden,
stösst man auf das Problem, dass die entsprechenden Formattypen nicht angeboten werden. Public Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long Dieser API-Aufruf liefert jedoch keine Informationen zurück, wenn der Benutzer den Dialog abbricht oder wenn ein Fehler auftritt. Um diese Fehler abzufangen, kann das API CommDlgExtendedError verwendet werden: Public Type OPENFILENAME lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type Das folgende Beispiel öffnet ein Dialogfenster zum Importieren einer VBA-Prozedur (Userforms,Module oder Klassenmodule) mit dem angegebenen Titel. Über die festgelegten Filter kann die Dateiauswahl auf die angegebenen Dateiendungen eingeschränkt werden. Wichtig Function fkt_FileOpen() As String 'used in call setup Dim sFilters, sType As String Dim pos As Integer 'used after call Dim buff As String Dim sLname As String Dim sSname As String sFilters = "VB-Dateien (*.frm;*.bas;*.cls)" & vbNullChar & _ "*.frm;*.bas;*.cls" & vbNullChar & _ "Formulardateien(*.frm)" & vbNullChar & "*.frm" & vbNullChar & _ "Basic-Dateien (*.bas)" & vbNullChar & "*.bas" & vbNullChar & _ "Klassendateien (*.cls)" & vbNullChar & "*.cls" & vbNullChar With OFName 'Setzt die Größe der OPENFILENAME Struktur .lStructSize = Len(OFName) 'Der Window Handle ist bei VBA fast immer &O0 .hwndOwner = &O0 ' Formattyp-Filter setzen .lpstrFilter = sFilters .nFilterIndex = 1 ' Buffer für Dateinamen erzeugen .lpstrFile = sModul & Space$(1024) & vbNullChar & vbNullChar ' Maximale Anzahl der Dateinamen-Zeichen .nMaxFile = Len(.lpstrFile) ' Buffer für Titel erzeugen .lpstrFileTitle = Space$(254) ' Maximale Anzahl der Titel-Zeichen .nMaxFileTitle = 255 ' Anfangsverzeichnis vorgeben .lpstrInitialDir = "c:\temp" ' Titel des Dialogfester festlegen .lpstrTitle = "Modul exportieren" ' Flags zum Festlegen eines bestimmten Verhaltens, ' OFN_LONGNAMES = lange Dateinamen verwenden .flags = OFN_LONGNAMES End With ' API aufrufen und evtl. Fehler abfangen If GetOpenFileName(OFName) Then fkt_FileOpen = Left(OFName.lpstrFile, InStr(1, OFName.lpstrFile, Chr(0)) - 1) ElseIf intError = 0 Then ' Abbruch durch Benutzer oder Fehler End If End Function Der Aufruf dieser Funktion sieht folgendermaßen aus: Sub DateiDialog() Dim sPfad As String sPfad = fkt_FileOpen MsgBox "Ausgewählte Datei: " & sPfad, vbInformation, "Dateiauswahl" End Sub |
www.chf-online.de/api/oeffnendialog.htm | © 2001-11 Christian Freßdorf (Zaphod-Systems) |