Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Mit Shell Ordner zippen aber mit Variablen

Begonnen von Carlos_C, Juli 02, 2015, 15:02:13

⏪ vorheriges - nächstes ⏩

Carlos_C

Hallo Forum,

mit folgendem Code:

Shell ("C:\Program Files\Utils\7-Zip\7z.exe a C:\Test\Test2.zip C:\Test\Test1\*.* -r")


Kann ich mit dem 7z den Ordner "C:\Test\Test1" zippen, und die zip Datei heißt "Test2.zip.

Funktioniert wunderbar.

Ich möchte aber das Ganze jetzt mit Variablen machen, also

Var1 = "C:\Program Files\Utils\7-Zip\7z.exe"
Var2 = "C:\Test\Test2.zip"
Var3 = "C:\Test\Test1\*.*"

Geht das???
Gruß,

Carlos

daolix

Hallo

Shell ( Var1 & " a " & Var2 & " " & Var3 & " -r")

Carlos_C

Super! Hat wunderbar funktioniert! Vielen Dank, DaoliX
Gruß,

Carlos

Carlos_C

Hallo daolix,

ich habe noch ein kleines Problem hier:

Also, nach dem

Shell ( Var1 & " a " & Var2 & " " & Var3 & " -r")

Soll das Programm die erzeugte ZIP Datei in einen anderen Ordner kopieren, und zwar mit dem Befehl

Fs.Copyfile AnfangPfad, ZielPfad

Das System meckert aber mit einem

,,Laufzeitfehler ,53': Datei nicht gefunden"

Das ,,Fs.Copyfile" funktioniert sonst immer (wird innerhalb des gleichen Codes schon problemlos benutzt, vorher mit der Deklaration

Dim Fs As Object

Und

Set Fs = CreateObject("scripting.filesystemobject")

Ich gehe davon aus, dass der "Fs.Copyfile" Befehl nicht funktioniert, weil in dem Moment, dass er ausgeführt wird, die zip-Datei noch nicht fertig erzeugt ist (es werden ein paar Sekunden gebraucht, bis die zip-Datei fertig ist).

Dann habe ich hier eine Frage:

Kann man per VBA den Befehl geben: Warte bis die zip-Datei da ist, und dann führt den Befehl ,,Fs.Copyfile" aus?

Freue mich auf jeden Vorschlag!
Gruß,

Carlos

daolix

#4
Hallo
ZitatIch gehe davon aus, dass der "Fs.Copyfile" Befehl nicht funktioniert, weil in dem Moment, dass er ausgeführt wird, die zip-Datei noch nicht fertig erzeugt ist (es werden ein paar Sekunden gebraucht, bis die zip-Datei fertig ist).
Genau das ist der Grund

ich sehe 3 Möglichkeiten:
entweder du startest einen wartenden Shellaufruf für das Zippen (hab jetzt aber gerade den entsprechenden befehl nicht zur Hand), oder du erstellst automatisiert eine Batch die das Zippen wie auch das Kopieren beinhaltet. In der Batch müssest du dann aber mit dem Dosen-Copy befehl arbeiten oder bei Var2 gibst du gleich den richtigen Path für die Zip-Datei an.


PS:
Wartenden Shell: probier mal
Set w = CreateObject("WScript.Shell")
    lret = w.Run(var1 & " a " & var2 & " " & var3 & " -r", SW_SHOWNORMAL, True)


Carlos_C

Habe das gelöst:

Shell ( Var1 & " a " & Var2 & " " & Var3 & " -r")
Do
Dir (Pfad\*.*")
Loop Until Dir(zip-Dateiname) <> ""
If (MsgBox("Möchten die Datei X herunterladen?", 4)) = vbYes Then
Fs.Copyfile AnfangPfad, ZielPfad
Else
End If
Gruß,

Carlos

daolix

kannste jetzt so machen, nur solltest du bedenken das bei einer evtl. nichterstellung der Zip aus irgendwelchen gründen auch immer,  dein Access im kreis läuft. Die Zeile Dir (Pfad\*.*") ergibt zudem kein Sinn.

Carlos_C

Gruß,

Carlos