Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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!
Anzeige

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
Anzeige
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
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Ordner in ZIP löschen: So geht's


Schritt-für-Schritt-Anleitung

Um einen Ordner in einer ZIP-Datei zu löschen, ohne die Datei zu entpacken, kannst Du den folgenden VBA-Code nutzen. Dieser umgeht die Bestätigungsdialoge, die normalerweise erscheinen:

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

Führe diesen Code in einem VBA-Modul aus, um die gewünschten Ordner in der ZIP-Datei zu löschen.


Häufige Fehler und Lösungen

  1. ZIP-Datei lässt sich nicht löschen: Stelle sicher, dass die ZIP-Datei nicht von einem anderen Programm verwendet wird. Schließe alle Programme, die auf die Datei zugreifen könnten.

  2. cmd del ohne Nachfrage funktioniert nicht: Der Befehl rd (remove directory) funktioniert in der Regel nicht für ZIP-Dateien. Verwende stattdessen den oben genannten VBA-Code.

  3. ZIP-Ordner nach Extrahieren leer: Wenn Du den ZIP-Ordner entpackt hast und er leer erscheint, könnte es sein, dass Du nicht alle Dateien erfolgreich extrahiert hast. Überprüfe die Extraktionsoptionen.


Alternative Methoden

Wenn Du keine VBA-Programmierung verwenden möchtest, kannst Du auch Tools von Drittanbietern nutzen, die ZIP-Dateien bearbeiten. Programme wie 7-Zip oder WinRAR bieten oft die Möglichkeit, Dateien und Ordner in ZIP-Archiven zu löschen, ohne sie zu entpacken.


Praktische Beispiele

Angenommen, Du hast einen ZIP-Ordner mit dem Namen Daten.zip, der die Ordner AlteDaten und NeueDaten enthält. Um AlteDaten zu löschen, kannst Du den folgenden VBA-Code verwenden:

Sub DeleteOldDataFromZip()
    Dim sPath As String
    sPath = "D:\Pfad\Zu\Daten.zip\"

    With CreateObject("Shell.Application")
        .Namespace(sPath & "AlteDaten").Self.InvokeVerb ("Delete")
    End With
End Sub

Tipps für Profis

  • Nutze die Application.DisplayAlerts = False-Anweisung, um Excel-Bestätigungen zu unterdrücken, bevor Du mit Shell arbeitest.
  • Achte darauf, den Timer nach der Ausführung zu stoppen, um unerwünschte Prozesse zu vermeiden.
  • Halte Deine VBA-Umgebung sauber, indem Du nicht mehr benötigte Module und Prozeduren regelmäßig entfernst.

FAQ: Häufige Fragen

1. Kann man ZIP-Dateien löschen, ohne sie zu entpacken?
Ja, das ist möglich, indem Du Tools wie den oben beschriebenen VBA-Code verwendest.

2. Wie kann ich einen ZIP-Ordner löschen, ohne Bestätigungen zu erhalten?
Verwende den Befehl Application.DisplayAlerts = False in Verbindung mit dem InvokeVerb-Befehl, um Bestätigungen zu unterdrücken.

3. Was tun, wenn die ZIP-Datei leer ist?
Überprüfe die Extraktionsoptionen oder stelle sicher, dass Du die Dateien korrekt extrahiert hast.

4. Gibt es eine Möglichkeit, ZIP-Dateien über die Kommandozeile zu löschen?
Ja, Du kannst cmd verwenden, aber es wird empfohlen, die VBA-Methode zu nutzen, um Konflikte mit Dialogfenstern zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige