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
Zeile 1: Zeile 1:
== Dateien kopieren, umbenennen, löschen ==
== Dateien kopieren, umbenennen, löschen ==


FileCopy
FileCopy


== Informationen einholen ==
== Informationen einholen ==
Zeile 7: Zeile 7:
=== 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 "c:\Temp\Hallo.txt" For Output As #1
  Debug.Print FileAttr(1)       ' ergibt 2 für 'Output'
  Close #1


=== Dir ===
=== Dir ===
Zeile 22: Zeile 31:
==== 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.
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 ====
==== 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 ("").
 
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 ==
== 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
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 ==
== Eingebaute Datei-Dialoge ==
Zeile 36: Zeile 102:
=== Beliebige Datei öffnen ===
=== 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\" <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
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


=== 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
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

Version vom 10. Oktober 2018, 16:32 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