Arbeiten mit Dateien: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Pwania (Diskussion | Beiträge) |
Pwania (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Category:vba-wiki]] | |||
== Dateien kopieren, umbenennen, löschen == | == Dateien kopieren, umbenennen, löschen == | ||
Zeile 41: | Zeile 42: | ||
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. | |||
* 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 | <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 <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 <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<span style="Color:gray">.</span>Add strPath & strFile | |||
strFile <span style="Color:gray">=</span> Dir | |||
Loop | <span style="Color:blue"> Loop | ||
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<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 == | ||
Public Sub WriteLineIntoTextFile(ByVal strFile As String, ByVal strLine As String) | <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> | ||
Dim lngFile As Long | <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 | |||
End Sub | <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> | |||
End Sub | |||
== Eingebaute Datei-Dialoge == | == Eingebaute Datei-Dialoge == | ||
=== Beliebige Datei öffnen === | === Beliebige Datei oder mit bestimmter Endung öffnen === | ||
Public Function BrowseToFile() As String | <span style="Color:blue"> Public Function </span>BrowseToFile<span style="Color:gray">()</span><span style="Color:blue"> As String</span> | ||
Dim dlg As FileDialog | <span style="Color:blue"> Dim </span>dlg<span style="Color:blue"> As </span>FileDialog | ||
Set dlg = Application.FileDialog(msoFileDialogFilePicker) | <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 | |||
If dlg.SelectedItems.Count > 0 Then | <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> | |||
End If | <span style="Color:blue"> End If</span> | ||
Set dlg = Nothing | <span style="Color:blue"> Set </span>dlg <span style="Color:gray">=</span> Nothing | ||
End Function | <span style="Color:blue"> End Function</span> | ||
=== Verzeichnis bestimmen === | === Verzeichnis bestimmen === | ||
Public Function BrowseToPath() As String | <span style="Color:blue"> Public Function </span>BrowseToPath<span style="Color:gray">()</span><span style="Color:blue"> As String</span> | ||
Dim dlg As FileDialog | <span style="Color:blue"> Dim </span>dlg<span style="Color:blue"> As </span>FileDialog | ||
Set dlg = Application.FileDialog(msoFileDialogFolderPicker) | <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 | |||
If dlg.SelectedItems.Count > 0 Then | <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> | |||
End If | <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