VBA Tipp: Datei verschieben

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Eine Datei soll von einem Quellverzeichnis in ein Zielverzeichnis verschoben werden.

Lösung 1

  • Eine geöffnete Access-Datenbank kann nicht verschoben werden.
  • Wenn die Datei am Zielort bereits existiert, wird eine Fehlermeldung angezeigt.
  • Die Namen der Quelldatei und der Zieldatei dürfen unterschiedlich sein.
  • Während des Verschiebevorgangs wird die Windows-Sanduhr angezeigt.
Public Function DateiVerschieben(Quelldatei As String, _
                                 Zieldatei As String) As Boolean
 
   ' Late Binding, kein Verweis auf die 'Microsoft Scripting Runtime' erforderlich
   ' Quelle: http://www.dbwiki.net/
 
   On Error GoTo Err_DateiVerschieben
 
   CreateObject("Scripting.FileSystemObject").MoveFile Quelldatei, Zieldatei
 
   ' Vorgang erfolgreich
   DateiVerschieben = True
 
Exit_DateiVerschieben:
   Exit Function
 
Err_DateiVerschieben:
   MsgBox "Laufzeitfehler '" & Err.Number & "':" & vbCrLf & vbCrLf & Err.Description
   Resume Exit_DateiVerschieben
 
End Function

Aufruf

 ' Datei verschieben, ohne Rückgabewert
 Call DateiVerschieben("C:\Ein Ordner\EinBackend.mdb", _
                       "G:\Datensicherung\EineBackendSicherung.mdb")
 
 ' Datei verschieben, Rückgabewert auswerten
 If DateiVerschieben("C:\Ein Ordner\EinBackend.mdb", _
                     "G:\Datensicherung\EineBackendSicherung.mdb") Then
   MsgBox "Verschieben erfolgreich."
 Else
   MsgBox "Verschieben nicht erfolgreich."
 End If

Lösung 2

  • Wenn die Datei im Zielverzeichnis bereits existiert, wird der Benutzer über eine entsprechende Windows-Dialogbox aufgefordert, zu entscheiden, ob die vorhandene Datei überschrieben werden soll oder nicht.
  • Wenn der Kopiervorgang länger dauert, wird die Windows-Fortschrittsanzeige eingeblendet.
  • Der Name der Quelldatei und der Zieldatei ist gleich.
  • Wenn als Dateiname *.* angegeben wird, werden alle Dateien und Ordner aus dem Quellordner in den Zielordner kopiert.
  • Wenn der Dateiname weggelassen wird, wird der ganze Quellordner in den Zielordner verschoben.
Public Sub DateiVerschieben(QuellDateipfad As String, _
                            ZielOrdner As String)
 
 ' Late Binding, kein Verweis auf 'Microsoft Shell Controls And Automation' erforderlich
 ' Quelle: http://www.dbwiki.net/
 
 Dim objShell   As Object ' Shell32.Shell
 Dim objFolder  As Object ' Shell32.Folder
 
 On Error GoTo Err_DateiVerschieben
 
 Set objShell = CreateObject("Shell.Application")
 
 ' Argument in doppelte Klammern bei Late Binding
 Set objFolder = objShell.Namespace((ZielOrdner))
 
 ' Argument in Klammern bei Late Binding
 objFolder.MoveHere (QuellDateipfad)
 
Exit_DateiVerschieben:
 Exit Sub
 
Err_DateiVerschieben:
 
 ' Wenn Fehler 91: 'Objektvariable oder With-Blockvariable nicht festgelegt'
 If Err.Number = 91 Then
   MsgBox "Der Pfad zum Zielordner '" & ZielOrdner & "' ist ungültig."
 Else
   ' Standard-Fehlermeldung
   MsgBox "Laufzeitfehler '" & Err.Number & "':" & vbCrLf & vbLf & Err.Description
 End If
 
 Resume Exit_DateiVerschieben
 
End Sub

Aufruf

 ' Datei verschieben
 Call DateiVerschieben("C:\Ein Ordner\EineDatei.pdf", "G:\Ein Anderer Ordner\")
 
 ' Alle Dateien und Ordner aus dem Quellordner in den Zielordner verschieben
 Call DateiVerschieben("C:\Ein Ordner\Ein Unterordner\*.*", "G:\Ein Anderer Ordner\")
 
 ' Einen ganzen Ordner verschieben, wenn kein Dateiname angegeben wird
 Call DateiVerschieben("C:\Ein Ordner\Ein Unterordner", "G:\Ein Anderer Ordner\")

Wikilinks

Weblinks