Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1840to1844
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ordner in ZIP löschen

Ordner in ZIP löschen
10.08.2021 20:11:40
Igor
Hallo super Profis!
Hier konnte ich bis jetzt alles finden, aber ein Problem finde ich nicht in gesamten Internet:
Ich möchte die unnötige Ordner und Dateien aus ZIP-Archiv entfernen ohne ihn zu entpacken.
Es klappt, ich möchte aber nicht alles bestätigen und so funktioniert es nicht:

' 1.)
Dim Folder As String
Folder = "D:\_Koeser\Arbeit\_DE_Bremen_MB\_Halle80\Modul2\BAK_20210713\UB52_120RB_200.zip\Log Files"
Shell "cmd /c rd /S/Q """ & Folder & """"
' nichts passiert.
' 2.)
' Delete Ordner aus ZIP SOLL ohne Abfrage:
Application.DisplayAlerts = False ' Überschreiben ohne Nachfrage:
CreateObject("Shell.Application").Namespace("D:\_Arbeit\BackUp001.zip\MuyGrande").Self.InvokeVerb ("Delete")
CreateObject("Shell.Application").Namespace("D:\_Arbeit\BackUp001.zip\VeryBig").Self.InvokeVerb ("Delete")
CreateObject("Shell.Application").Namespace("D:\_Arbeit\BackUp001.zip\SehrGross").Self.InvokeVerb ("Delete")
Application.DisplayAlerts = True
' gelöscht mit Abfrage.
Stop
Stop
VIELEN DANK vom Umwelt für weniger elektronischer Schrott!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordner in ZIP löschen
10.08.2021 22:02:49
onur
Application.DisplayAlerts = False
schaltet nur Meldungen von Excel aus, und nicht von anderen Programmen, die du mit Shell aufrufst.
Hier hat Jemand das selbe Problem gehabt:
https://newbedev.com/deleting-a-folder-from-a-zip-file
AW: Ordner in ZIP löschen
11.08.2021 14:45:17
volti
Hallo Igor,
falls noch von Interesse und noch nicht gelöst (z.B. durch den Beitrag von Onurs Link) hier noch eine Idee dazu.
Klick doch einfach die MsgBox entsprechend weg...
Es kommt ja häufig vor, dass Buttons in Dialogboxen angeklickt werden sollen, dieses aber nicht möglich ist, weil VBA mit Erscheinen der DlgBox nicht weiter läuft.
Mit ein wenig API-Code läßt sich das aber leicht lösen.
Code:

[Cc][+][-]

Option Explicit Private Declare PtrSafe Function KillTimer Lib "user32" ( _ ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long Private Declare PtrSafe Function SetTimer Lib "user32" ( _ ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr, _ ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr Private Declare PtrSafe Function SendDlgItemMessageA Lib "user32" ( _ ByVal hDlg As LongPtr, ByVal nIDDlgItem As Long, _ ByVal wMsg As Long, ByVal wParam As LongPtr, _ ByVal lParam As LongPtr) As LongPtr Private Declare PtrSafe Function FindWindowA Lib "user32" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As LongPtr Dim hTimer As LongPtr Sub ZipDelete() Dim sPath As String On Error GoTo Fehler sPath = "D:\_Arbeit\BackUp001.zip\" hTimer = SetTimer(0&, 0&, 50, AddressOf DlgClickProc) With CreateObject("Shell.Application") .Namespace(sPath & "MuyGrande").Self.InvokeVerb ("Delete") .Namespace(sPath & "VeryBig").Self.InvokeVerb ("Delete") .Namespace(sPath & "SehrGross").Self.InvokeVerb ("Delete") End With Fehler: KillTimer 0&, hTimer End Sub Private Sub DlgClickProc() ' Klickt den Ja-Button an Dim hDlg As LongPtr hDlg = FindWindowA("#32770", "Ordner löschen") If hDlg > 0 Then SendDlgItemMessageA hDlg, 6, &HF5, 0&, 0& '6=ja, 2=nein End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Ordner in ZIP löschen
12.08.2021 20:14:53
Igor
Cool! Zwar ist da viel was ich nicht verstehe, aber das funktioniert! Danke!!!
AW: Ordner in ZIP löschen
13.08.2021 00:01:21
volti
Hallo Igor,
vielen Dank für die Rückmeldung.
Es wird einfach ein Timer gesetzt, der alle 50 ms in der Sub DlgClickProc prüft, ob die Dialogbox "Ordner öffnen" aktiv ist und dann der Ja-Button angeklickt.
Die Dialogbox verschwindet dann bis zur nächsten Aktion.
Am Schluss wird der Timer wieder gelöscht.
Die SendDlgItemMessage-Function sendet an das Control mit der ID=6 (Ja-Button) einen BM_Click-Befehl (&HF5), so als wenn Du es manuell gemacht hättest.
viele Grüße
Karl-Heinz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige