Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - Mappe speichern + Backup
#21
Hallo EasY,

dem "Vorschlag"

(08.12.2018, 14:16)snb schrieb: Lösche 'Option Explicit'

halte ich entgegen: Option Explicit, Intellisense und Techniken des Schreibens

Gruß Uwe
Antworten Top
#22
Hallo,

"ForFiles" kannte ich auch nicht, ist aber sehr interessant.

Aber: ging NICHT
Code:
ForFiles /D -8

Ging
Code:
ForFiles /D 01.11.2018

Diese relative Datumsangabe lief unter Win10 nicht. Ist das korigierbar?

mfg

(edit: in der "Steinzeit" (=vor Windows) wurde auch so etwas genutzt
for /F %i in (*.txt) do @echo %i)
((auch für das LAN:
for /L %i in (20,1,99) do ping -n 1 192.168.178.%i
dann arp -a))
Antworten Top
#23
Hallöchen,

hier mal was etwas ausführlicheres …

Sub Behalte_8()
'Variablendeklarationen 
Dim strShell$, strCmd$ 'String 
Dim objWsh             'Object 
'Variablen fuer Wsh 
Dim waitOnReturn: waitOnReturn = True
Dim windowStyle: windowStyle = 3
'wsh setzen 
Set objWsh = CreateObject("WScript.Shell")
'Verzeichnis für wsh festlegen 
objWsh.currentdirectory = "c:\temp"
'Command-String bilden. Dir - Ausgabe nach Datum sortiert. Skip ueberspringt n Eintraege, 
strCmd = """for /f ""skip=8 delims="" %i in ('dir /a-D /o-d /b *.log') do Del ""%~i"""""
strCmd = "cmd.exe /C " & strCmd
'Cmd ausfuehren 
objWsh.Run strCmd, windowStyle, waitOnReturn
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Der Ansatz von SNB ist auch gut, allerdings wird da erst mal entsprechend der Dir-Option nur ein File berücksichtigt. Da muss noch bisschen was gemacht werden, damit die n jüngsten Dateien behalten werden …


@Fennek
"Diese relative Datumsangabe lief unter Win10 nicht. "
Was bedeutet das? Ist einfach nix passiert? Kam eine Fehlermeldung? Kommt was falsches? …

Ich bekomme damit was: forfiles /D -8 /C "cmd /c echo @file"
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#24
Zitat:Der Ansatz von SNB ist auch gut, allerdings wird da erst mal entsprechend der Dir-Option nur ein File berücksichtigt. Da muss noch bisschen was gemacht werden, damit die n jüngsten Dateien behalten werden …

@Kuwer

Offensichtlich nicht getestet ?

Weist du was /o d bedeutet ?

Die älteste Backup sollte gelöscht werden.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#25
Hallöchen snb,

Zitat:Die älteste Backup sollte gelöscht werden.

… ist nur die eine Hälfte der Anforderung. Dazu kommt

Zitat:die Krux liegt nun darin, dass nur maximal "x" Backup-Dateien vorhanden sein sollen

Wenn noch keine x Dateien vorhanden sind, wirst Du x nicht erreichen?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#26
Ohne x zu benennen kann man dazu keine Code entwerfen.

Der TS könnte einfach x Backupfiles händisch speichern.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#27
Hi Leute,


bitte nicht streiten - ihr liefert allesamt geniale Arbeit ab :).

Vielleicht sollte ich das Projekt weiter umschreiben: Ich möchte einen Arbeitsplan in Excel erstellen. Für jede Kalenderwoche wird eine Datei angelegt. Über einen Button soll die Datei gespeichert werden, eine Backup sowie eine pdf erstellt werden.
Die pdf soll dann für die Mitarbeiter zum Draufschauen sein. Die Excel-Dateien sind den darin arbeitenden Chefs vorbehalten. Noch weiß ich nicht, wie viele Backups der selben Kalenderwoche erstellt werden sollen (da wird sich mein Chef zu äußern müssen) ... deswegen fragte ich auch nach den Anpassungen der Parameter.

@schauan
Ich habe deine Version ausprobiert ... Ich musste nur objwsh.currentdirectory anpassen, richtig?
Das Problem daran ist nun, dass sich direkt mein Bitdefender gemeldet und den cmd-Befehl angehalten hat. Ich befürchte, dass das dann auf der Arbeit genau so sein wird - ist ein recht sensibler Bereich :/. Gäbe es eine Alternative zum Löschen der Backups oder komme ich an der cmd-Methode nicht vorbei?


Gruß
Antworten Top
#28
Jetzt habe ich auch die Version von RPP63 doch noch zum Laufen bekommen:

Code:
Sub Delete_oldest_File()
Dim FSO, f, fi
Dim MinDateCreated As Date: MinDateCreated = 99999

Set FSO = CreateObject("Scripting.FileSystemObject")
Set f = FSO.GetFolder(Environ("UserProfile") & "\Desktop\Testordner")
For Each fi In f.Files
 If fi.DateCreated < MinDateCreated Then MinDateCreated = fi.DateCreated
Next
For Each fi In f.Files
 If fi.DateCreated = MinDateCreated Then FSO.DeleteFile fi
Next
End Sub

Das funktioniert auch super soweit. Das Makro löscht die Datei mit dem ältesten Änderungsdatum, richtig?

Weswegen ich den Code anfangs nicht zum Laufen gebracht habe wäre Inhalt meiner nächsten Frage: Kann man den Pfad, in dem er die Datei suchen soll auch in Klarnamen dort hinschreiben? Da die Pfadstruktur noch nicht feststeht und die Struktur auch ein wenig verwurstelt ist, wäre das für mich als Einsteiger eingängiger. Sprich aus
Code:
Environ("UserProfile") & "\Desktop\Testordner"

soll


Code:
Environ("C:\Users\T\Desktop\Testordner")


werden.


Was ich mich auch noch frage: Kann der Code auch prüfen, dass er nur ausgeführt wird, wenn 20 oder 30 oder 40 Backupdateien vorhanden sind ... bzw "x" Backupdateien?


Gruß
Antworten Top
#29
Hallöchen,

ja, das Anpassen des Pfades und auch der Dateierweiterung - ich habe *.log - kannst Du machen. Je nach Einstellung eines Schutzprogramms kann es passieren, dass da was greift. Das löschen geschieht hier über den "Umweg" eines cmd und das wird nicht überall gern gesehen.

Beim direkten Kill aus Excel heraus müsstest Du Dir vielleicht erst einmal eine Liste der Dateien z.B. in ein Array oder eine Tabelle schreiben und wenn dieses ausreichend lang ist dann die "überzähligen" Dateien löschen, z.B.:

For Each fi In f.Files
iCnt=iCnt+1
Cells(iCnt,1) = fi.Name
Cells(iCnt,2) = fi.DateCreated
Next

Damit hättest Du auf der aktiven Tabelle in Spalte A und B die Zeiten und Namen. Dass dann noch nach Datum sortieren und dann in einer Schleife ab Zeile 9 oder welche auch immer schauen, ob was drin steht und wenn ja, Datei löschen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#30
(07.12.2018, 18:23)RPP63 schrieb: @Case:
Deine Shell filtert doch nicht nach dem ältesten Erstelldatum, sondern löscht alles älter als 8 Tage.
Oder liege ich da falsch?

Hallo Ralf, :19:

mit dem Schalter "D" kann man eigentlich recht gezielt löschen: :21:

/D    Datum     Wählt Dateien mit einem Änderungsdatum größer
                        oder gleich (+), oder weniger oder gleich
                        (-), das angegebene Datum mit Format
                        "dd.MM.yyyy"; oder wählt Dateien, dessen letztes
                        Änderungsdatum größer oder gleich (+) dem
                        heutigen Datum plus "tt" Tagen oder weniger
                        oder gleich (-) heute minus "tt" Tagen. Gültige
                        Werte für "tt" sind Zahlen zwischen 0 und 32768.
                        Ohne Angabe wird "+" standardmäßig
                        verwendet.
________
Servus
Case
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste