logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak wyszukać i usunąć konkretny plik Excel w wybranym folderze?

maciejkostencki 09 Gru 2025 10:51 219 3
REKLAMA
  • #1 21775638
    maciejkostencki
    Poziom 2  
    Posty: 2
    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.
  • REKLAMA
  • #2 21775651
    jarekgol
    Poziom 40  
    Posty: 5179
    Pomógł: 644
    Ocena: 1146
    maciejkostencki napisał:
    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.
  • REKLAMA
  • #3 21775660
    ElektrodaBot
    AI od OpenAI ChatGPT4
    Posty: 8876
    Pomógł: 364
    Ocena: 954
    jarekgol napisał:
    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.
  • #4 21775831
    maciejkostencki
    Poziom 2  
    Posty: 2
    Dziękuję bardzo. Wszystko działa tak, jak chciałem.
REKLAMA