Arbeiten mit Dateien: Unterschied zwischen den Versionen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen
Zeile 41: Zeile 41:


In diesem Beispiel wird die 'Dir'-Funktion wie folgt eingesetzt:
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.
* 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.
* 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 ("").
* 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
  <span style="Color:blue"> Public Function </span>FilesInFolder<span style="Color:gray">(</span><span style="Color:blue">ByVal </span>strPath<span style="Color:blue"> As String</span><span style="Color:gray">,</span><span style="Color:blue"> ByVal </span>strFileExtension<span style="Color:blue"> As String</span><span style="Color:gray">)</span><span style="Color:blue"> As </span>Collection
     Dim strFile As String
     <span style="Color:blue"> Dim </span>strFile<span style="Color:blue"> As String</span>
   
     
     If Right(strPath, 1) <> "\" Then
     <span style="Color:blue"> If </span>Right<span style="Color:gray">(</span>strPath<span style="Color:gray">,</span> <span style="Color:gray">1)</span> <span style="Color:gray"><></span> <span style="Color:gray">"\"</span><span style="Color:blue"> Then</span>
        strPath = strPath & "\"
          strPath <span style="Color:gray">=</span> strPath & <span style="Color:gray">"\"</span>
     End If
     <span style="Color:blue"> End If</span>
   
     
     Set FilesInFolder = New Collection
     <span style="Color:blue"> Set </span>FilesInFolder <span style="Color:gray">=</span><span style="Color:blue"> New </span>Collection
   
     
    strFile = Dir(strPath & "*." & strFileExtension)
      strFile <span style="Color:gray">=</span> Dir<span style="Color:gray">(</span>strPath & <span style="Color:gray">"*."</span> & strFileExtension<span style="Color:gray">)</span>
     Do Until strFile = ""
     <span style="Color:blue"> Do Until </span>strFile <span style="Color:gray">=</span> <span style="Color:gray">""</span>
        FilesInFolder.Add strPath & strFile
          FilesInFolder<span style="Color:gray">.</span>Add strPath & strFile
        strFile = Dir
          strFile <span style="Color:gray">=</span> Dir
     Loop
     <span style="Color:blue"> Loop
End Function
  End Function</span>


  Sub TestFilesInFolder()
  <span style="Color:blue"> Sub </span>TestFilesInFolder<span style="Color:gray">()</span>
     Dim colFiles As Collection
     <span style="Color:blue"> Dim </span>colFiles<span style="Color:blue"> As </span>Collection
   
     
     Set colFiles = FilesInFolder("c:\temp", "csv")
     <span style="Color:blue"> Set </span>colFiles <span style="Color:gray">=</span> FilesInFolder<span style="Color:gray">("c:\temp",</span> <span style="Color:gray">"csv")</span>
    Debug.Print colFiles.Count
      Debug<span style="Color:gray">.</span>Print colFiles<span style="Color:gray">.</span>Count
  End Sub
  <span style="Color:blue"> End Sub</span>


== Textdateien ein- und auslesen ==
== Textdateien ein- und auslesen ==

Version vom 21. Juni 2019, 09:47 Uhr

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 ö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 nur ein Pfad angegeben wird, wird hiermit begonnen
    dlg.AllowMultiSelect = False
    ' Eigene Dateifilter verwenden:
    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