Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
932to936
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
932to936
932to936
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Dateien aus Ordner löschen

Dateien aus Ordner löschen
12.12.2007 07:41:55
Wolfgang
Hallo,
ich würde gerne aus untenstehendem Pfad/Verzeichnis im Unterordner KDTemp sämtliche Dateien mit der Endung ".tmp" löschen; dabei soll allerdings immer die jüngste Datei bestehen bleiben. Wäre so etwas möglich? - Das Verzeichnis ist über Username gesteuert, daher der untenstehende Vorspann zum Verzeichnis. Danke schon jetzt für die Rückmeldungen.
Gruß - Wolfgang
'Pfad
Dim strUser As String
strUser = Environ("Username")
strUser = Trim$(Replace(strUser, ".GST", ""))
Sheets("Daten").Activate
With ActiveSheet.QueryTables.Add(Connection:= _
'Verzeichnis
C:\Dokumente und Einstellungen\" & strUser & "\Lokale Einstellungen\Temp\KDTemp\.tmp",

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien aus Ordner löschen
12.12.2007 10:42:00
Wolli
Hallo Namensvetter, dies sollte Dir helfen!

Sub TMPs_loeschen()
Dim strUser As String, _
strVerzeichnis As String, _
strAktuelle As String, _
strJuengste As String
strUser = Environ("Username")
strUser = Trim$(Replace(strUser, ".GST", ""))
strVerzeichnis = "C:\Dokumente und Einstellungen\" & strUser & _
"\Lokale Einstellungen\Temp\KDTemp"
strAktuelle = Dir(strVerzeichnis & "\*.tmp")
strJuengste = strAktuelle
Do
If FileDateTime(strVerzeichnis & "\" & strAktuelle)  strJuengste Then
Kill (strVerzeichnis & "\" & strAktuelle)
End If
strAktuelle = Dir
Loop Until strAktuelle = ""
End Sub


Gruß, Wolli

Anzeige
Hallo Wolli, Hallo Heiko - läuft grundsätzlich
12.12.2007 15:23:00
Wolfgang
Hallo Wolli und Heiko,
sorry, dass ich mich jetzt erst melde; ich hatte heute nachmittag Eure Rückmeldungen entdeckt und getestet. In Deinem Code, Wolli, bleibt die älteste Datei stehen, im Code von Dir, Heiko, tatsächlich die jüngste Datei. Ich hatte schon gesehen, Wolli, dass Du auch eine Antwort im anderen Thread gegeben hast. Wie würde ich, als Laie, nun nur bewerkstelligen können, dass mit dem Pfad für den Datenimport (siehe unten) eben nun diese eine verbliebene .tmp-Datei angesprochen wird, ohne einen konkreten Namen zuweisen zu können? - Da wo jetzt noch im untenstehenden Auszug die kundaten.txt-datei steht müßte ja irgendwie der Platzhalter für die eine .tmp-datei stehen. Hättet Ihr da evtl. noch Vorschläge? - Danke schon jetzt wieder für die Rückmeldungen.
Herzliche Grüße
Wolfgang
Dim strUser As String
strUser = Environ("Username")
strUser = Trim$(Replace(strUser, "GST", ""))
Sheets("Daten").Activate
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Dokumente und Einstellungen\" & strUser & "\Lokale Einstellungen\Temp\KDTemp\kundendaten.txt", Destination:=Range("A1"))
ChDrive "C"

Anzeige
AW: Hallo Wolli, Hallo Heiko - läuft grundsätzlich
12.12.2007 15:52:00
Heiko
Hallo Wolfgang,
müssen denn die .tmp Dateien wirklich gelöscht werden oder machst du das nur, um an die eine zu kommen die über bleibt. Denn du könntest, mit einem leicht abgewandelten Code von mir, ja auch einfach die neuste tmp Datei suchen und diesen Dateinamen für den Datenimport nutzen.
Denn erstens braucht das löschen Zeit und Rechnerkapazität und zweitens mögen einige Virenscanner Kill Befehle in Makros garnicht gerne.
Wenn du auch löschen willst dann könnte das in etwa so aussehen:

Function KillOldTemps(strPath As String) As String
Dim strKillFile As String, strTemp As String
Dim datLastDate As Date
Dim myFileSystemObject, myFiles
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
For Each myFiles In myFileSystemObject.GetFolder(strPath).Files
If UCase(myFileSystemObject.GetExtensionName(strPath & "\" & myFiles.Name)) = "TMP" Then
If (myFiles.DateCreated > datLastDate) And (datLastDate  "00:00:00") Then
Kill strKillFile
datLastDate = myFiles.DateCreated
strKillFile = strPath & "\" & myFiles.Name
strTemp = myFiles.Name
ElseIf (myFiles.DateCreated  "00:00:00") Then
Kill strPath & "\" & myFiles.Name
Else
datLastDate = myFiles.DateCreated
strKillFile = strPath & "\" & myFiles.Name
strTemp = myFiles.Name
End If
End If
Next myFiles
KillOldTemps = strTemp
End Function


Und dann deins, den Pfad "C:\WINDOWS\Temp" mußt du natürlich noch auf deinen Pfad ändern !!!
strUser = Environ("Username")
strUser = Trim$(Replace(strUser, "GST", ""))
Sheets("Daten").Activate
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Dokumente und Einstellungen\" & strUser & "\Lokale Einstellungen\Temp\KDTemp\" & KillOldTemps("C:\WINDOWS\Temp"), Destination:=Range("A1"))
ChDrive "C"
Habe ich jetzt auf die schnelle nicht getestet, wenn nicht läuft kann ich morgen früh nochmal drüber schauen.
Gruß Heiko
PS: Rückmeldung wäre nett !

Anzeige
Danke Heiko - brauche noch Hilfe
12.12.2007 16:29:55
Wolfgang
Hallo Heiko,
erneute Danke für die Rückmeldung; ich habe versucht, deinen Code einzubauen. VBA bzw. Excel meldet nun irgendwelche Syntaxfehler.
Dein Hinweis ist sehr gut, die alten Dateien gar nicht zu löschen, sondern tatsächlich immer die jüngste Datei zuzuzweisen. Das Löschen grundsätzlich klappt zwar, aber wenn es schneller und problemloser mit Deinem Vorschlag geht, wäre ich Dir für eine Rückmeldung sehr dankbar. Ich möchte tatsächlich "lediglich" erreichen, dass aus der letzten/jüngsten Datei .tmp die Daten unter angegebenem Pfad importiert werden können. Danke schon jetzt wieder für Deine Rückmeldung und zunächst einen schönen Feierabend.
Herzliche Grüße
Wolfgang

Anzeige
AW: Danke Heiko - brauche noch Hilfe
13.12.2007 08:48:38
Heiko
Moin Wolfgang,
dann so:

Public Sub TestT()
Dim strUser As String, strPath As String, strhelp As String
' Dein Teil für den UserNamen
strUser = Environ("Username")
strUser = Trim$(Replace(strUser, "GST", ""))
' Zusammenbauen des Pfades aus Vorgabepfad und UserName
strPath = "C:\WINDOWS\Temp\" & strUser & "\Temp"
If Dir(strPath, vbDirectory) = "" Then
MsgBox "Das angegebene Verzeichnis existiert nicht!", vbCritical
Exit Sub
End If
Sheets("Daten").Activate
' Nun noch das TEXT; davor & Aufruf der Function die die neuste Tmp Datei als String zurückgibt. _
strhelp = FindNewestTemp(strPath)
If strhelp  "" Then
strPath = "TEXT;" & FindNewestTemp(strPath)
Else
MsgBox "Es wurde keine TMP Datei im angegebenen Verzeichnis gefunden!", vbCritical
Exit Sub
End If
' Und nun nur noch importieren, fertig !!!
With ActiveSheet.QueryTables.Add(Connection:=strPath, Destination:=Range("A1"))
.Refresh
' ChDrive "C"
End With
End Sub



Public Function FindNewestTemp(strPath As String) As String
Dim strFile As String
Dim datNewestDate As Date
Dim myFileSystemObject, myFiles
If Right(strPath, 1)  "\" Then strPath = strPath & "\"
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
For Each myFiles In myFileSystemObject.GetFolder(strPath).Files
If UCase(myFileSystemObject.GetExtensionName(strPath & myFiles.Name)) = "TMP" Then
If myFiles.DateCreated > datNewestDate Then
datNewestDate = myFiles.DateCreated
strFile = myFiles.Name
End If
End If
Next myFiles
If strFile  "" Then
FindNewestTemp = strPath & strFile
Else
FindNewestTemp = ""
End If
End Function


Gruß Heiko
PS: Rückmeldung wäre nett !

Anzeige
Kleine Änderung !!!
13.12.2007 08:57:38
Heiko
Moin Wolfgang,
ich nochmal, kleine Änderung in TestT:

Public Sub TestT()
Dim strUser As String, strPath As String, strhelp As String
' Dein Teil für den UserNamen
strUser = Environ("Username")
strUser = Trim$(Replace(strUser, "GST", ""))
' Zusammenbauen des Pfades aus Vorgabepfad und UserName
strPath = "C:\WINDOWS\Temp\" & strUser & "\Temp"
If Dir(strPath, vbDirectory) = "" Then
MsgBox "Das angegebene Verzeichnis existiert nicht!", vbCritical
Exit Sub
End If
Sheets("Daten").Activate
' Nun noch das TEXT; davor & Aufruf der Function die die neuste Tmp Datei als String zurückgibt. _
strhelp = FindNewestTemp(strPath)
If strhelp  "" Then
strPath = "TEXT;" & strhelp
Else
MsgBox "Es wurde keine TMP Datei im angegebenen Verzeichnis gefunden!", vbCritical
Exit Sub
End If
' Und nun nur noch importieren, fertig !!!
With ActiveSheet.QueryTables.Add(Connection:=strPath, Destination:=Range("A1"))
.Refresh
' ChDrive "C"
End With
End Sub


Gruß Heiko
PS: Rückmeldung wäre nett !

Anzeige
AW: Kleine Änderung !!!
13.12.2007 10:22:33
Wolfgang
Hallo Heiko,
zunächst erneut recht herzlichen Dank für Deine Rückmeldung und Ausarbeitungen; Ich habe zwischendurch 'mal kurz die Codes eingebaut und getestet. So wie ich es spontan sehe, rennen die auch soweit. - Momentan habe ich noch das Problem, das die Spaltentrennung nicht mehr funktioniert, da kommen jetzt Fehlermeldungen. Ich schaue mir das noch in ruhiger Minute an und werde mich auf jeden Fall noch erneut melden. Soweit nochmals recht herzlichen Dank.
Gruß - Wolfgang

Danke Heiko - läuft super !
13.12.2007 14:31:00
Wolfgang
Hallo Heiko,
habe noch zwischenzeitlich ruhige Minuten nutzen können, um den gesamten Code zu testen bzw. zu korrigieren; habe somit auch den Bock entdeckt, warum die Aufteilung in Zellen nicht funktionierte. Kompliment, Deine Codes laufen super und genauso, wie ich sie benötige. Herzlichen Dank dafür und weiterhin alles Gute.
Gruß - Wolfgang

Anzeige
AW: Dateien aus Ordner löschen
12.12.2007 10:59:00
Heiko
Hallo Wolfgang,
teste mal dieses Makro:

Sub KillOldTemps()
Dim strPath As String, strKillFile As String
Dim datLastDate As Date
Dim myFileSystemObject, myFiles
' Hier muss dann noch dein Teil für den Pfad rein
strPath = "C:\WINDOWS\Temp"
Set myFileSystemObject = CreateObject("Scripting.FileSystemObject")
For Each myFiles In myFileSystemObject.GetFolder(strPath).Files
If UCase(myFileSystemObject.GetExtensionName(strPath & "/" & myFiles.Name)) = "TMP" Then
If (myFiles.DateCreated > datLastDate) And (datLastDate  "00:00:00") Then
Kill strKillFile
datLastDate = myFiles.DateCreated
strKillFile = strPath & "/" & myFiles.Name
ElseIf (myFiles.DateCreated  "00:00:00") Then
Kill strPath & "/" & myFiles.Name
Else
datLastDate = myFiles.DateCreated
strKillFile = strPath & "/" & myFiles.Name
End If
End If
Next myFiles
End Sub


Gruß Heiko
PS: Rückmeldung wäre nett !

Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige