Ordner und Dateien synchronisieren mit VBA
Schritt-für-Schritt-Anleitung
Um zwei Ordner zu synchronisieren, kannst Du VBA verwenden. Hier sind die Schritte, die Du befolgen kannst:
- Öffne Excel und drücke
ALT + F11
, um den VBA-Editor zu öffnen.
- Wähle
Einfügen
> Modul
, um ein neues Modul zu erstellen.
- Kopiere und füge den folgenden Code in das Modul ein:
Option Explicit
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
ByVal DirPath As String) As Long
Private Declare Function CopyFileA Lib "kernel32.dll" ( _
ByVal lpExistingFileName As String, _
ByVal lpNewFileName As String, _
ByVal bFailIfExists As Long) As Long
Public Sub Syncronisieren()
Const QUELLE As String = "T:\Projekte\Service\Düsseldorf\2018\Arcaden Düsseldorf\"
Const ZIEL As String = "S:\Backup\Meine Projekte\Service\Düsseldorf\2018\Arcaden Düsseldorf\"
Dim astrFolders() As String, strFilename As String
Dim ialngFoldes As Long, lngLen As Long
lngLen = Len(QUELLE) + 1
astrFolders = GetFolders(QUELLE)
For ialngFoldes = LBound(astrFolders) To UBound(astrFolders)
Call MakeSureDirectoryPathExists(ZIEL & Mid$(astrFolders(ialngFoldes), lngLen))
Next
For ialngFoldes = LBound(astrFolders) To UBound(astrFolders)
strFilename = Dir$(astrFolders(ialngFoldes) & "*.*")
Do Until strFilename = vbNullString
Call CopyFileA(astrFolders(ialngFoldes) & strFilename, _
ZIEL & Mid$(astrFolders(ialngFoldes), lngLen) & strFilename, 0)
strFilename = Dir$
Loop
Next
End Sub
Private Function GetFolders(ByVal pvstrPath As String) As String()
Dim astrFolders() As String
Dim strFolder As String, strPath As String
Dim ialngIndex1 As Long, ialngIndex2 As Long
strPath = pvstrPath
ReDim astrFolders(0 To 0)
astrFolders(0) = pvstrPath
ialngIndex1 = 1
Do
strFolder = Dir$(strPath & "*", vbDirectory)
Do Until strFolder = vbNullString
If strFolder <> "." And strFolder <> ".." Then
If GetAttr(strPath & strFolder) And vbDirectory Then
ReDim Preserve astrFolders(0 To ialngIndex1)
astrFolders(ialngIndex1) = strPath & strFolder & "\"
ialngIndex1 = ialngIndex1 + 1
End If
End If
strFolder = Dir$
Loop
Loop While ialngIndex1 <> ialngIndex2
GetFolders = astrFolders
End Function
- Ändere die
QUELLE
und ZIEL
Pfade entsprechend Deinen Bedürfnissen.
- Führe das Makro aus, um die Ordner zu synchronisieren.
Häufige Fehler und Lösungen
Alternative Methoden
Falls Du keine VBA-Programmierung verwenden möchtest, kannst Du auch folgende Methoden in Betracht ziehen:
- Windows Synchronisationscenter: Nutze die integrierten Windows-Tools zum Synchronisieren von Ordnern.
- Drittanbieter-Software: Es gibt viele Programme zur Dateisynchronisation, wie z.B. FreeFileSync oder GoodSync, die eine einfache Benutzeroberfläche bieten.
Praktische Beispiele
Wenn Du Excel-Dateien synchronisieren möchtest, kannst Du die oben genannte VBA-Methode verwenden, um die Inhalte in zwei verschiedenen Ordnern abzugleichen. Diese Methode kann auch für andere Dateitypen angepasst werden.
Tipps für Profis
- Automatisierung: Du kannst das VBA-Skript so anpassen, dass es in regelmäßigen Abständen automatisch ausgeführt wird.
- Logging: Füge ein Logging-System hinzu, um zu verfolgen, welche Dateien kopiert oder gelöscht wurden.
- Testlauf: Führe einen Testlauf mit einer kleinen Anzahl von Dateien durch, bevor Du das Skript auf größere Mengen anwendest.
FAQ: Häufige Fragen
1. Kann ich auch Unterordner synchronisieren?
Ja, das Skript synchronisiert auch Unterordner und deren Inhalte.
2. Was passiert mit den Dateien im Zielordner?
Das Skript überschreibt Dateien im Zielordner, wenn sie im Quellordner vorhanden sind.
3. Ist es möglich, Dateien im Zielordner zu löschen, die nicht im Quellordner vorhanden sind?
Ja, Du kannst den Code anpassen, um sicherzustellen, dass der Zielordner nur die Dateien enthält, die im Quellordner vorhanden sind.