Arbeiten mit Dateien: Unterschied zwischen den Versionen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „== Dateien kopieren, umbenennen, löschen == FileCopy == Informationen einholen == === FileAttr === Ermittelt bei einer mit 'Open' geöffneten Datei den Mo…“)
 
Keine Bearbeitungszusammenfassung
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Category:vba-wiki]]
== Dateien kopieren, umbenennen, löschen ==
== Dateien kopieren, umbenennen, löschen ==


FileCopy
FileCopy


== Informationen einholen ==
== Informationen einholen ==
Zeile 7: Zeile 8:
=== FileAttr ===
=== FileAttr ===


Ermittelt bei einer mit 'Open' geöffneten Datei den Modus, in der sie geöffnet wurde. '''Parameter:'''
Ermittelt bei einer mit 'Open' geöffneten Datei den Modus, in der sie geöffnet wurde.
 
'''Parameter:'''
* Dateinummer (hier die 1, da 'As #1')
* 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)'''
* Optional: Rückgabetyp, muss '''IMMER''' mit 1 (Standardwert) angegeben (und kann somit weggelassen) werden
 
'''Mögliche Modi (Rückgabewert)'''
* Input = 1
* Input = 1
* Output = 2
* Output = 2
* Random = 4
* Random = 4
* Append = 8
* Append = 8  
* Binary = 32 Open "c:\Temp\Hallo.txt" For Output As #1 Debug.Print FileAttr(1) ' ergibt 2 für 'Output' Close #1
* Binary = 32  
    Open <span style="Color:gray">"c:\Temp\Hallo.txt"</span><span style="Color:blue"> For </span>Output<span style="Color:blue"> As </span><span style="Color:gray">#1</span>
    Debug<span style="Color:gray">.</span>Print FileAttr<span style="Color:gray">(1)</span>      <span style="Color:green">' ergibt 2 für 'Output'</span>
    Close <span style="Color:gray">#1</span>


=== Dir ===
=== Dir ===
Zeile 22: Zeile 32:
==== Existenz prüfen ====
==== 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.
<span style="Color:blue"> If </span>Dir<span style="Color:gray">("c:\temp\test.txt")</span> <span style="Color:gray">=</span> <span style="Color:gray">""</span><span style="Color:blue"> Then </span>
      MsgBox <span style="Color:gray">"Die Datei konnte leider nicht gefunden werden!"</span>
<span style="Color:blue"> End If</span>
 
* 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 ====
==== 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
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 ("").
 
<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
    <span style="Color:blue"> Dim </span>strFile<span style="Color:blue"> As String</span>
     
    <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 <span style="Color:gray">=</span> strPath & <span style="Color:gray">"\"</span>
    <span style="Color:blue"> End If</span>
     
    <span style="Color:blue"> Set </span>FilesInFolder <span style="Color:gray">=</span><span style="Color:blue"> New </span>Collection
     
      strFile <span style="Color:gray">=</span> Dir<span style="Color:gray">(</span>strPath & <span style="Color:gray">"*."</span> & strFileExtension<span style="Color:gray">)</span>
    <span style="Color:blue"> Do Until </span>strFile <span style="Color:gray">=</span> <span style="Color:gray">""</span>
          FilesInFolder<span style="Color:gray">.</span>Add strPath & strFile
          strFile <span style="Color:gray">=</span> Dir
    <span style="Color:blue"> Loop
  End Function</span>
 
<span style="Color:blue"> Sub </span>TestFilesInFolder<span style="Color:gray">()</span>
    <span style="Color:blue"> Dim </span>colFiles<span style="Color:blue"> As </span>Collection
     
    <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<span style="Color:gray">.</span>Print colFiles<span style="Color:gray">.</span>Count
<span style="Color:blue"> End Sub</span>


== Textdateien ein- und auslesen ==
== 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
<span style="Color:blue"> Public Sub </span>WriteLineIntoTextFile<span style="Color:gray">(</span><span style="Color:blue">ByVal </span>strFile<span style="Color:blue"> As String</span><span style="Color:gray">,</span><span style="Color:blue"> ByVal </span>strLine<span style="Color:blue"> As String</span><span style="Color:gray">)</span>
    <span style="Color:blue"> Dim </span>lngFile<span style="Color:blue"> As Long</span>
     
      lngFile <span style="Color:gray">=</span> FreeFile
      Open strFile<span style="Color:blue"> For </span>Output<span style="Color:blue"> As </span><span style="Color:gray">#</span>lngFile
      Print <span style="Color:gray">#</span>lngFile<span style="Color:gray">,</span> strLine
      Close <span style="Color:gray">#</span>lngFile
<span style="Color:blue"> End Sub</span>
 
<span style="Color:blue"> Public Function </span>ReadFirstLineFromTextFile<span style="Color:gray">(</span><span style="Color:blue">ByVal </span>strFile<span style="Color:blue"> As String</span><span style="Color:gray">)</span><span style="Color:blue"> As String</span>
    <span style="Color:blue"> Dim </span>strText<span style="Color:blue"> As String</span>
    <span style="Color:blue"> Dim </span>lngFile<span style="Color:blue"> As Long</span>
     
      lngFile <span style="Color:gray">=</span> FreeFile
      Open strFile<span style="Color:blue"> For </span>Input<span style="Color:blue"> As </span><span style="Color:gray">#</span>lngFile
      Input <span style="Color:gray">#</span>lngFile<span style="Color:gray">,</span> strText
      Close <span style="Color:gray">#</span>lngFile
      ReadFirstLineFromTextFile <span style="Color:gray">=</span> strText
<span style="Color:blue"> End Function</span>
 
<span style="Color:blue"> Private Sub </span>Test<span style="Color:gray">()</span>
     
      WriteLineIntoTextFile <span style="Color:gray">"c:\Temp\Hallo.txt",</span> <span style="Color:gray">"Hallo"</span>
      Debug<span style="Color:gray">.</span>Print ReadFirstLineFromTextFile<span style="Color:gray">("c:\Temp\Hallo.txt")</span>
<span style="Color:blue"> End Sub</span>


== Eingebaute Datei-Dialoge ==
== Eingebaute Datei-Dialoge ==


=== Beliebige Datei öffnen ===
=== 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\" <span style="Color:green">' Wenn nur ein Pfad angegeben wird, wird hiermit begonnen</span> dlg.AllowMultiSelect = False <span style="Color:Green">' Eigene Dateifilter verwenden:</span> 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
<span style="Color:blue"> Public Function </span>BrowseToFile<span style="Color:gray">()</span><span style="Color:blue"> As String</span>
    <span style="Color:blue"> Dim </span>dlg<span style="Color:blue"> As </span>FileDialog
     
    <span style="Color:blue"> Set </span>dlg <span style="Color:gray">=</span> Application<span style="Color:gray">.</span>FileDialog<span style="Color:gray">(</span>msoFileDialogFilePicker<span style="Color:gray">)</span>
      dlg<span style="Color:gray">.</span>Title <span style="Color:gray">=</span> <span style="Color:gray">"Datei wählen"</span>
      dlg<span style="Color:gray">.</span>InitialFileName <span style="Color:gray">=</span> <span style="Color:gray">"C:\temp\"</span>    <span style="Color:green">' Wenn keine Datei angegeben wird, öffnet der Dialog in diesem Verzeichnis</span>
      dlg<span style="Color:gray">.</span>AllowMultiSelect <span style="Color:gray">=</span><span style="Color:blue"> False</span>
      <span style="Color:green">' Eigene Dateifilter verwenden (Dateiendung vorgeben):</span>
      dlg<span style="Color:gray">.</span>Filters<span style="Color:gray">.</span>Clear
      dlg<span style="Color:gray">.</span>Filters<span style="Color:gray">.</span>Add <span style="Color:gray">"Meine Dateien",</span> <span style="Color:gray">"*.pwf"</span>
      dlg<span style="Color:gray">.</span>Filters<span style="Color:gray">.</span>Add <span style="Color:gray">"Alle Dateien",</span> <span style="Color:gray">"*.*"</span>
      dlg<span style="Color:gray">.</span>Show
    <span style="Color:blue"> If </span>dlg<span style="Color:gray">.</span>SelectedItems<span style="Color:gray">.</span>Count <span style="Color:gray">></span> <span style="Color:gray">0</span><span style="Color:blue"> Then</span>
          BrowseToFile <span style="Color:gray">=</span> dlg<span style="Color:gray">.</span>SelectedItems<span style="Color:gray">.</span>Item<span style="Color:gray">(1)</span>
    <span style="Color:blue"> End If</span>
    <span style="Color:blue"> Set </span>dlg <span style="Color:gray">=</span> Nothing
<span style="Color:blue"> End Function</span>


=== Verzeichnis bestimmen ===
=== 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
<span style="Color:blue"> Public Function </span>BrowseToPath<span style="Color:gray">()</span><span style="Color:blue"> As String</span>
    <span style="Color:blue"> Dim </span>dlg<span style="Color:blue"> As </span>FileDialog
     
    <span style="Color:blue"> Set </span>dlg <span style="Color:gray">=</span> Application<span style="Color:gray">.</span>FileDialog<span style="Color:gray">(</span>msoFileDialogFolderPicker<span style="Color:gray">)</span>
      dlg<span style="Color:gray">.</span>Title <span style="Color:gray">=</span> <span style="Color:gray">"Zielverzeichnis wählen"</span>
      dlg<span style="Color:gray">.</span>InitialFileName <span style="Color:gray">=</span> <span style="Color:gray">"C:\temp\"</span>
      dlg<span style="Color:gray">.</span>Show
    <span style="Color:blue"> If </span>dlg<span style="Color:gray">.</span>SelectedItems<span style="Color:gray">.</span>Count <span style="Color:gray">></span> <span style="Color:gray">0</span><span style="Color:blue"> Then</span>
          BrowseToPath <span style="Color:gray">=</span> dlg<span style="Color:gray">.</span>SelectedItems<span style="Color:gray">.</span>Item<span style="Color:gray">(1)</span>
    <span style="Color:blue"> End If
  End Function</span>

Aktuelle Version vom 28. Januar 2023, 00:34 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 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