[Gelöst] Ordner vergleichen und ggf. Inhalt kopieren

Moderator: ModerationP

[Gelöst] Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon Tobias.Vetter » 18. Okt 2021, 09:09

Hallo ihr lieben,
folgende Frage:

Ist es möglich, aus Access einen VBA Code zu starten, welcher Ordner A mit Ordner B vergleicht und ggf. unterschiedlichen Inhalt von Ordner B in Ordner A kopiert?

Also in Ordner A liegt z.B. folgendes:
Bild.jpg
AB.doc
CD.pdf

In Ordner B liegt:
Bild.jpg
AB.doc
CD.pdf
DE.pdf

Jetzt soll der Code erkennen, dass in Ordner A, DE.pdf nicht liegt und dies dann von B in A kopieren.
Das doofe ist daran, dass es nicht nur auf .pdf gehen soll sondern jegliche Art von Datei.

Zunächst soll es die Datei nur kopieren, wenn später dann die Datei in B löschen, das ist dann jedoch kein Problem mehr

Danke für eure Hilfe und liebe Grüße

Tobias
Zuletzt geändert von Tobias.Vetter am 18. Okt 2021, 12:47, insgesamt 1-mal geändert.
Tobias.Vetter
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 60
Registriert: 09. Okt 2020, 09:11

Re: Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon HKindler » 18. Okt 2021, 10:10

Hi,

am einfachsten erledigt man so etwas mit RoboCopy. Das kopiert alles, was in A Neuer ist als in B.

iAufruf in VBA (Ordner A nach Ordner B nur kopieren):
Shell "robocopy ""Ordner A"" ""Ordner B"""

Ordner A nach Ordner B kopieren und danach in A löschen:
Shell "robocopy ""Ordner A"" ""Ordner B"" MOV"

Beachte dabei, dass man wegen der Leerzeichen im Ordnernamen Anführungszeichen um die Ordnernamen braucht, di innerhalb des Strings zu verdoppeln sind.

Für weitere Optionen in einem CMD-Fenster einfach einmal Help robocopy eingeben.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6453
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon knobbi38 » 18. Okt 2021, 10:10

Hallo Tobias,

natürlich könnte man so etwas auch in VBA programmieren, aber unter Windows gibt es den DOS-Befehl "robocopy", der solche Aufgaben erledigen kann. Zum Teil können auch viele "Sync"-Programme und Backupprogramme für so etwas genutzt werden.

Gruß Ulrich

Edit: Helmut war etwas schneller :)
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3596
Registriert: 02. Jul 2015, 14:23

Re: Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon Tobias.Vetter » 18. Okt 2021, 11:12

Danke schon einmal für die Tipp,
jetzt hapert es noch an der Umsetzung.

Meine Ordner werden über diverse Aneinanderkettungen in Modulen ermittelt.

Code: Alles auswählen
Public Property Get cKundenordner() As String
    cKundenordner = cDaten & cOrdnerJahr & "\" & cKunde & "\"           '<- Der Pfad für den Access Ordner wird zusammengefügt ->
End Property


Code: Alles auswählen
Sub cOrdneröffnen()

Shell "robocopy ""cKundenordner_alt"" ""cKundenordner"""
Shell "explorer.exe /e, " & cKundenordner, vbNormalFocus
End Sub


So gibt es keinen Fehler in der Syntax aber der Befehl wird nicht aus geführt :cry:

Den Ordner öffnet er anschließend jedoch richtig.

Liebe Grüße
Tobias.Vetter
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 60
Registriert: 09. Okt 2020, 09:11

Re: Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon knobbi38 » 18. Okt 2021, 11:31

Hallo Tobias,

du mußt das Argument für die Shell-Anweisung natürlich genauso zusammen setzen, wir deine Pfadangabe. Mit dem Text "cKundenordner" kann robocopy nichts anfangen.

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3596
Registriert: 02. Jul 2015, 14:23

Re: Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon Tobias.Vetter » 18. Okt 2021, 11:55

Schade, wie füge ich dann z.B. sowas in den Befehl mit ein?

Code: Alles auswählen
Public Property Get cKunde() As String
    cKunde = Nz(DLookup("Name_Komplett", "AB_Ordner"), "")              '<- Hier wird in der Abfrage AB_Ordner nach der Zelle Name_Komplett gesucht und als Variable cKunde wiedergegeben ->
End Property
Tobias.Vetter
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 60
Registriert: 09. Okt 2020, 09:11

Re: Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon knobbi38 » 18. Okt 2021, 12:27

Hallo Tobias,

also bevor du jetzt deine Anforderungen noch verkomplizierst, wäre es doch angebracht, zunächst die einfachste Variante umzusetzen.
Mit "Schade" hat das nichts tun und das hilft auch nicht weiter.

Das Argument muß so übergeben werden, wie der Befehl auch in der Eingabeaufforderung ausgeführen werden müßte. Dieses kannst du ja zunächst ausprobieren und wenn das dann klappt, baust du einen String zusammen, der dann genau diese Zeile enthält. Mit Debug.Print kannst du den im Direktfenster ausgeben lassen. Wenn das ok ist, wird diese Stringvariable dann an die Shell-Anweisung als Argument übergeben. Wenn ich mich richtig erinnere, hatten wir das schon mal.

Gruß Ulrich
Zuletzt geändert von knobbi38 am 18. Okt 2021, 16:51, insgesamt 1-mal geändert.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3596
Registriert: 02. Jul 2015, 14:23

Re: Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon Tobias.Vetter » 18. Okt 2021, 12:47

Danke für die Hinweise.
Unter den "fix" angegeben Pfaden hat es funktioniert.

Folgender Befehl funktioniert nun auch mit den Variablen:

Code: Alles auswählen
Shell "cmd /c robocopy " & cKundenordner_Hansa & " " & cKundenordner
Tobias.Vetter
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 60
Registriert: 09. Okt 2020, 09:11

Re: [Gelöst] Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon HKindler » 18. Okt 2021, 12:58

Hi,

also wie man Strings in VBA zusammensetzt ist doch absolutes Grundlagenwissen. Wenn man das nicht hat, sollte man sich dies vor dem Programmieren aneignen.

Code: Alles auswählen
Shell "cmd /c robocopy ""cKundenordner_alt"" ""cKundenordner"""
müsste heißen
Code: Alles auswählen
Shell "cmd /c robocopy " & chr(34) & cKundenordner_alt & chr(34) & " " & chr(34) & cKundenordner & chr(34)
hier habe ich statt der "-Zeichen innerhalb des Strings lieber chr(34) verwendet, das macht die Sache etwas übersichtlicher. Andere Alternative: irgendein Zeichen verwenden, das nicht vorkommt und dieses dann ersetzen:
Code: Alles auswählen
Befehl = "cmd /c robocopy *" & cKundenordner_alt & "* *" & cKundenordner & "*"
Befehl = Replace(Befehl, "*", Chr(34))
Shell Befehl


EDIT: cmd /c muss natürlich noch vor RoboCopy...
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6453
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald

Re: [Gelöst] Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon Marco PB » 18. Okt 2021, 15:23

Chr(34)) ist natürlich auch eine Lösung, aber in VBA (und Basic überhaupt), doppelte Anführungszeichen in einer Zeichenkette werden einfach doppelt geschrieben ohne Leerzeichen dazwischen:

"irgendein Zeichen " ist allerdings wie AnyKey: Für Replace() ist ein Sternchen ein Joker, so überschreibt Replace(Befehl, "*", "X") die ganze Zeichenkette .
Marco PB
 

Re: [Gelöst] Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon knobbi38 » 18. Okt 2021, 17:06

@Helmut:
wieso muß "cmd /c" vor die Zeichenkette? Robocopy ist ein eigenständiges Programm und muß nicht unter bzw. in der Kommandozeile ausgeführt werden.

Grüße Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3596
Registriert: 02. Jul 2015, 14:23

Re: [Gelöst] Ordner vergleichen und ggf. Inhalt kopieren

Beitragvon HKindler » 20. Okt 2021, 07:58

@Ulrich,

hast Recht, hatte es nicht mit Robocopy sondern nur mit Dir getestet. Dort braucht man es...
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6453
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 Gäste