ich habe gerade ein kleines Problem bzgl. eines VBA-Codes den ich geschrieben habe.
Es geht konkret darum:
Ich möchte aus einem Ordner alle Dateien löschen die nach der Filterung in Excel nicht mehr sichtbar sind. Dies habe ich soweit auch schon hinbekommen. Mein Problem sind nun aber noch fehlerhafte Anwendungen die ich abfangen möchte. Mein Code funktioniert nur Zuverlässung wenn der Inhalt des Ordner vor dem Löschen gleich der ungefilterten Excel-Liste ist.
Wenn vorher mehrere Dateien im Ordner waren, dann bleiben diese nach dem Durchlaufen des Codes ebenfalls enthalten. Dies ist aber nicht zulässig
Ich habe hierzu auch schon einen Beitrag gefunden siehe:
Beitrag: https://www.herber.de/forum/archiv/708to712/710729_Dateien_anhand_Liste_loeschen.html
Nur leider habe ich hier das Problem, dass dieser sehr alt ist und seit Excel 2007 der Code nicht mehr funktioniert.
Gibt es eine Möglichkeit wie ich dies in neueren Excel-Versionen umsetzen kann.
Ich würde mich freuen wenn mir jemand weiterhelfen könnte.
Die Aufgabe nochmals zusammengefasst:
1.) Alle .txt-Dateien die nicht in der Liste sichtbar sind sollen gelöscht werden.
2.) Es soll überprüft werden, ob nach dem löschen alle .txt-Dateien die durch die Filterung sichtbar sind auch im Ordner liegen. Es könnte ja sein, das eine Datei zu wenig im Ordner gelegen ist.
Ich habe ein Beispiel und die benötigten .txt-Dateien unter dem Link hochgeladen, sodass ihr das selbst ausprobieren könnt. Sprache bitte per Dropdown (DE_US auswählen).
Link (mit Dateien): https://www.herber.de/bbs/user/115106.zip
Bisher verwendete Codes
Code 1:
Sub Dateiensatz_reduzieren()
Dim Speicherort As String
Dim Sprache As String
Dim Nummer As String
Dim i As Integer
Speicherort = Tabelle1.Range("B3").Value 'Speicherort aus Excel-Blatt
Sprache = Tabelle1.Range("B1").Value 'Sprache aus Excel-Blatt
i = 10 'in Zeile 10 beginnen
If Next2 = 0 Then
Do _
'Beginnende Schleife
If Not Tabelle1.Range("D" & i).Offset(0, 0) = "" Then _
'Prüfen ob Zelle leer ist
If Not Tabelle1.Rows(i).Hidden = False Then _
'Prüfen ob Zeile unsichtbar oder durch Autofilter ausgeblendet
Nummer = Tabelle1.Range("D" & i).Value _
'Nummer aus Zelle
Call Loeschen_nicht_benoetigtes_Dateien(Nummer, Sprache, Speicherort) _
'Aufrufen Code zum Schild aus Ordner löschen
End If
Else
Exit Do _
' Abbruch der Schleife/ Schleife verlassen
End If
i = i + 1 _
'Zeile hochzählen um alle Zeilen zu durchlaufen bis leere Zelle kommt
Loop
Else
Exit Sub
End If
End Sub
Code 2:Sub Loeschen_nicht_benoetigtes_Dateien(Nummer, Sprache, Speicherort)
Dim i2 As Integer
Dim i3 As String
Dim Pfad As String
Pfad = Speicherort + "\"
' Löschen der Schilder
If Dir(Pfad + Nummer + Sprache + ".txt") "" Then 'Prüfen ob _
Datei bereits vorhanden
i2 = 1
Do
i3 = CStr(i2)
If Dir(Pfad + Nummer + Sprache + "(" + i3 + ")" + ".txt") "" Then 'Suchen der _
obersten/letzten Datei die noch vorhanden ist
i2 = i2 + 1
Else
i2 = i2 - 1
If i2 = 0 Then
Kill Pfad + Nummer + Sprache + ".txt" 'Löschen _
der untersten/ersten Datei falls dieses Schild überhaupt nicht benötigt
Exit Do
Else
i3 = CStr(i2)
Kill Pfad + Nummer + Sprache + "(" + i3 + ")" + ".txt" 'Löschen _
der obersten/letzten Datei die noch vorhanden ist
Exit Do
End If
End If
Loop
Else
MsgBox ("Excel-Liste stimmt nicht mit Komplettsatz überein. Fehler bei Datei (" + _
Nummer + Sprache + ") aufgedrehten. Datei konnte in Ordner nicht gelöscht werden, da die Datei nicht vorhanden war. Bitte die Excel-Liste überprüfen. Anschließend Ordner leeren und den kompletten Dateisatz nochmals importieren.")
End If
End Sub