Wyszukiwanie konkretnego pliku Excel w folderze i następnie usunięcie tego pliku. Szukam podpowiedzi, jak stworzyć makro, które znajdzie np. trzeci plik w danym folderze i usunie go za pomocą funkcji Kill. Stworzyłem już makro, które usuwa mi wszystkie pliki w danym folderze. Głównie chodzi mi o to, żeby tworzyć kopie zapasowe pliku Excel w danym folderze, za każdym razem, kiedy plik jest zamykany. To już udało mi się zrobić. Tym samym chciałbym uniknąć tworzenia się dużej liczby plików w folderze docelowym, więc chciałbym, żeby np. po tygodniu najstarsze pliki zostały automatycznie usunięte z folderu lub ostatnie np. 3 pliki zostały usunięte z folderu. Obecnie wiem tylko, jak usunąć wszystkie pliki, ale nie o to do końca chodzi. Każda podpowiedź mile widziana. AI: Czy pliki kopii zapasowych mają jakiś określony wzorzec nazwy (np. zaczynają się od konkretnego prefiksu lub zawierają datę), czy w folderze mogą znajdować się też inne pliki, których nie chcesz usuwać? Pliki są zapisywane jako nazwa pliku, data i godzina. AI: Na podstawie jakiego kryterium chcesz usuwać pliki – daty utworzenia, daty modyfikacji, czy może kolejności alfabetycznej nazw plików? Na podstawie daty utworzenia.
Pliki sa zapisywane jako nazwa pliku, data i godzina.
no to musisz pobrać listę plików ze szczegółami, wyłuskać z nazw (lub właściwości pliku) datę/godzinę i w pętli wydać rozkazy kasowania tych, co spełniają kryteria.
@ElektrodaBot daj program / makro w VBA które odczyta listę plików w katalogu, porówna które były starsze niż tydzień i je skasuje.
no to musisz pobrać listę plików ze szczegółami, wyłuskać z nazw (lub właściwości pliku) datę/godzinę i w pętli wydać rozkazy kasowania tych, co spełniają kryteria.
@ElektrodaBot daj program / makro w VBA które odczyta listę plików w katalogu, porówna które były starsze niż tydzień i je skasuje.
Bezpośrednia odpowiedź Poniżej masz gotowe makro VBA, które: - czyta listę plików z podanego katalogu, - sprawdza datę UTWORZENIA każdego pliku (FileSystemObject.DateCreated), - usuwa pliki starsze niż 7 dni (domyślnie).
Dodałem też wariant zachowujący N najnowszych kopii oraz (opcjonalnie) wariant liczony z daty w NAZWIE pliku, jeśli tak wolisz.
---
Makro: usuń pliki starsze niż tydzień wg daty UTWORZENIA
Skopiuj do standardowego modułu (Insert > Module). Ustaw ścieżkę i ewentualny filtr nazw.
Kod: Text
Zaloguj się, aby zobaczyć kod
Kluczowe punkty: - Używam `FileSystemObject.GetFolder(...).Files` + `File.DateCreated` (to odpowiada Twojemu kryterium „na podstawie daty utworzenia”). - Filtr `mask` zawęża kasowanie tylko do Twoich kopii (np. `Backup_*.xls*`), więc inne pliki w folderze są bezpieczne. - Usuwanie jest trwałe (nie trafia do Kosza).
---
Wariant: zostaw tylko N najnowszych kopii (resztę usuń)
Jeśli zamiast „starsze niż tydzień” chcesz po prostu utrzymywać np. 3 ostatnie kopie, użyj poniższego kodu. Sortuję po dacie utworzenia i kasuję najstarsze ponad limit.
Kod: Text
Zaloguj się, aby zobaczyć kod
Uwaga: `System.Collections.ArrayList` jest częścią .NET i zwykle jest dostępna w systemach Windows z MS Office. Gdyby jej nie było, da się to zastąpić prostym sortowaniem tablicy.
---
(Opcjonalnie) Liczenie wieku z daty w NAZWIE pliku Skoro Twoje kopie mają w nazwie datę/godzinę, możesz bazować wyłącznie na nazwie – np. pliki typu `Backup_20251201_153045.xlsx` lub `... 2025-12-01 15-30-45 ...`. Poniższy pomocnik próbuje wyłuskać `YYYYMMDD HHMMSS` w różnych separatorach:
Kod: Text
Zaloguj się, aby zobaczyć kod
Przykładowe użycie w sprzątaniu (zamiast `DateCreated`):
Kod: Text
Zaloguj się, aby zobaczyć kod
---
Integracja „przy zamknięciu pliku” Jeżeli robisz kopię przy zamykaniu skoroszytu i od razu chcesz sprzątać:
Kod: Text
Zaloguj się, aby zobaczyć kod
---
Uwagi praktyczne i pułapki - FileDateTime vs DateCreated: w VBA funkcja `FileDateTime` zwykle zwraca „ostatnią modyfikację”, a Ty chcesz „utworzenie”, dlatego użyłem `FileSystemObject.GetFile(...).DateCreated`. - Sieciowe/NAS: na niektórych udziałach sieciowych znaczenie „DateCreated” może być emulowane; jeśli nie ufasz metadanym systemowym, bazuj na dacie w nazwie pliku (wariant z RegExp). - Plik otwarty/zablokowany: jeśli kopia jest w użyciu lub chroniona, usuwanie zgłosi błąd (loguję to w oknie Immediate/Debug.Print). - Usuwanie jest trwałe (nie trafia do Kosza). Jeśli koniecznie chcesz „do Kosza”, da się to zrobić przez API `SHFileOperation`/`IFileOperation` (mogę dopisać wersję 32/64‑bit). - Filtr mask: zawsze zawężaj `mask` (np. `Backup_*.xls*`), aby nie ruszyć obcych plików w tym samym folderze.
---
Dalsze kroki / pytania - Potwierdź proszę docelową ścieżkę folderu i faktyczny wzorzec nazwy kopii (prefiks, rozszerzenie). - Który tryb ma być domyślny: „starsze niż 7 dni” czy „zostaw N najnowszych”? Jeśli N – ile sztuk? - Czy chcesz tryb „na sucho” (podgląd listy do usunięcia bez kasowania) i/lub log do pliku CSV? Chętnie dopiszę.
Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.