it-swarm.com.de

VBA, um eine Datei von einem Verzeichnis in ein anderes zu kopieren

Ich habe also eine Zugriffsdatei, die ich regelmäßig in ein anderes Verzeichnis kopieren muss, um die letzte Version zu ersetzen. Ich möchte dazu ein Excel-Makro verwenden und die Datei dabei auch umbenennen.

Z.B.

   fileName = "X:\Database\oldName.accdb"
   copyDestination = "Y:\dbstore\"
   newName = "newName.accdb"

Gibt es einen einfachen Weg, dies zu tun?

35
harryg

Verwenden Sie die entsprechenden Methoden in Scripting.FileSystemObject. Dann ist Ihr Code portabler für VBScript und VB.net. Um loslegen zu können, müssen Sie Folgendes hinzufügen:

Dim fso As Object
Set fso = VBA.CreateObject("Scripting.FileSystemObject")

Dann könntest du verwenden 

Call fso.CopyFile(source, destination[, overwrite] )

dabei sind Quelle und Ziel die vollständigen Namen (einschließlich Pfade) der Datei.

Siehe http://msdn.Microsoft.com/de-de/library/aa711216(v=vs.71).aspx

55
Bathsheba

Diese Methode ist noch einfacher, wenn Sie mit weniger Optionen zufrieden sind:

FileCopy source, destination
65
Jon

Eine Sache, die mir bei der Verwendung dieses Codes massive Kopfschmerzen bereitete ( könnte sich auf andere auswirken, und ich wünschte, jemand hätte hier einen Kommentar wie diesen hinterlassen ):

  • Mein Ziel ist es, ein dynamisches Zugriffs-Dashboard zu erstellen, bei dem die verknüpften Tabellen aktualisiert werden müssen.
  • Ich verwende die oben beschriebenen Kopiermethoden, um die vorhandenen verknüpften CSVs durch eine aktualisierte Version von ihnen zu ersetzen.
  • Das Ausführen des obigen Codes von einem Modul aus funktionierte einwandfrei.
  • Das Ausführen von identischem Code aus einem mit den CSV-Daten verknüpften Formular hatte den Laufzeitfehler 70 (Berechtigung verweigert). Der erste Schritt meines Codes bestand im Schließen dieses Formulars (das die CSV-Datei hätte entsperren sollen, damit sie überschrieben werden kann).
  • Ich glaube jetzt, dass trotz des geschlossenen Formulars die veraltete CSV-Datei gesperrt bleibt, während VBA mit diesem Formular verbunden wird.

Meine Lösung besteht darin, den Code (On-Timer-Ereignis) von einem anderen ausgeblendeten Formular auszuführen, das mit der Datenbank geöffnet wird.

0
Galanor