Arbeiten mit Dateien

Aus VBA-wiki
Zur Navigation springen Zur Suche springen

Dateien kopieren, umbenennen, löschen

FileCopy

Informationen einholen

FileAttr

Ermittelt bei einer mit 'Open' geöffneten Datei den Modus, in der sie geöffnet wurde.

Parameter:

  • Dateinummer (hier die 1, da 'As #1')
  • Optional: Rückgabetyp, muss IMMER mit 1 (Standardwert) angegeben (und kann somit weggelassen) werden

Mögliche Modi (Rückgabewert)

  • Input = 1
  • Output = 2
  • Random = 4
  • Append = 8
  • Binary = 32


   Open "c:\Temp\Hallo.txt" For Output As #1
   Debug.Print FileAttr(1)       ' ergibt 2 für 'Output'
   Close #1

Dir

Die 'Dir'-Funktion kann verwendet werden, um festzustellen, ob eine gesuchte Datei oder ein Datei-Ordner existiert, oder sie kann mithilfe von Platzhaltern nach Dateien suchen.

Existenz prüfen

 If Dir("c:\temp\test.txt") = "" Then 
     MsgBox "Die Datei konnte leider nicht gefunden werden!"
 End If
  • Wenn die angegebene Datei existiert, wird deren vollständiger Pfad zurückgegeben.
  • Wenn die Datei nicht gefunden werden konnte, wird eine leere Zeichenkette ("") zurückgegeben.

Dateien in einem Verzeichnis finden

In diesem Beispiel wird die 'Dir'-Funktion wie folgt eingesetzt:

  • Beim ersten Aufruf wird ein Pfad angegeben, der mithilfe des '*'-Platzhalters die Suche nach einer entsprechenden Datei einleitet.
  • Alle weiteren Aufrufe (in der Do-Schleife) werden ohne Übergabeparameter durchgeführt, wodurch die 'Dir'-Funktion weitere Treffer zu den ursprünglichen Suchkriterien liefert.
  • Auch hier gilt: Können keine (weiteren) Dateien passend zu den Suchkriterien gefunden werden, liefert die 'Dir'-Funktion eine leere Zeichenkette zurück ("").
 Public Function FilesInFolder(ByVal strPath As String, ByVal strFileExtension As String) As Collection
     Dim strFile As String
     
     If Right(strPath, 1) <> "\" Then
         strPath = strPath & "\"
     End If
     
     Set FilesInFolder = New Collection
     
     strFile = Dir(strPath & "*." & strFileExtension)
     Do Until strFile = ""
         FilesInFolder.Add strPath & strFile
         strFile = Dir
     Loop
 End Function
 Sub TestFilesInFolder()
     Dim colFiles As Collection
     
     Set colFiles = FilesInFolder("c:\temp", "csv")
     Debug.Print colFiles.Count
 End Sub

Textdateien ein- und auslesen

 Public Sub WriteLineIntoTextFile(ByVal strFile As String, ByVal strLine As String)
     Dim lngFile As Long
     
     lngFile = FreeFile
     Open strFile For Output As #lngFile
     Print #lngFile, strLine
     Close #lngFile
 End Sub
 Public Function ReadFirstLineFromTextFile(ByVal strFile As String) As String
     Dim strText As String
     Dim lngFile As Long
     
     lngFile = FreeFile
     Open strFile For Input As #lngFile
     Input #lngFile, strText
     Close #lngFile
     ReadFirstLineFromTextFile = strText
 End Function
 Private Sub Test()
     
     WriteLineIntoTextFile "c:\Temp\Hallo.txt", "Hallo"
     Debug.Print ReadFirstLineFromTextFile("c:\Temp\Hallo.txt")
 End Sub

Eingebaute Datei-Dialoge

Beliebige Datei oder mit bestimmter Endung öffnen

 Public Function BrowseToFile() As String
     Dim dlg As FileDialog
     
     Set dlg = Application.FileDialog(msoFileDialogFilePicker)
     dlg.Title = "Datei wählen"
     dlg.InitialFileName = "C:\temp\"    ' Wenn keine Datei angegeben wird, öffnet der Dialog in diesem Verzeichnis
     dlg.AllowMultiSelect = False
     ' Eigene Dateifilter verwenden (Dateiendung vorgeben):
     dlg.Filters.Clear
     dlg.Filters.Add "Meine Dateien", "*.pwf"
     dlg.Filters.Add "Alle Dateien", "*.*"
     dlg.Show
     If dlg.SelectedItems.Count > 0 Then
         BrowseToFile = dlg.SelectedItems.Item(1)
     End If
     Set dlg = Nothing
 End Function

Verzeichnis bestimmen

 Public Function BrowseToPath() As String
     Dim dlg As FileDialog
     
     Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
     dlg.Title = "Zielverzeichnis wählen"
     dlg.InitialFileName = "C:\temp\"
     dlg.Show
     If dlg.SelectedItems.Count > 0 Then
         BrowseToPath = dlg.SelectedItems.Item(1)
     End If
 End Function