• Zapisz się do newslettera, aby otrzymywać powiadomienia o nowościach na blogu
    Zapisując się, wyrażasz zgodę na przesyłanie Ci informacji o nowościach na tym blogu. Zgodę możesz w każdej chwili wycofać (szczegóły).

Zapisz plik pod nazwą wskazaną w komórce (VBA)

Czyli trochę o “zabijaniu” plików

Naszym celem jest to, aby za każdym razem, gdy będziemy zamykać plik – zapisywał się on pod nazwą wskazaną w jednej z komórek arkusza. Formatka zawiera więc tylko tę komórkę, która zawiera przyszłą nazwę pliku:

Formatka

Formatka

Komórkę tę warto nazwać, aby ułatwić namierzanie jej w kodzie VBA, bo taki właśnie będziemy pisać, aby rozwiązać to zadanie. Komórkę nazwałam jako “Komorka” i takiego odwołania do niej będę używała dalej (tutaj, w sekcji Nazywanie komórek, dowiesz się jak nazywać komórki).

Rozwiązanie będzie bazowało na zdarzeniu skoroszytu BeforeClose. Tworzenie zdarzenia skoroszytu (Workbook) opisałam tutaj. W naszym przypadku trzeba będzie tylko wybrać zdarzenie BeforeClose.

Teraz już czas na kod.

Potrzebujemy 3 zmiennych:

  1. NowaNazwa
  2. Sciezka
  3. StaraNazwa

Wszystkie tekstowe, czyli typu String.

Czemu akurat takie? Ponieważ nasze makro będzie działało tak, że przed zamknięciem pliku zapisze go pod nową nazwą (opcja: zapisz jako), a następnie stary plik usunie. Usuwanie oczywiście można pominąć, jeśli chcemy tworzyć backup poprzednich plików – ja osobiście bym tak wolała. Będzie to kwestia jednej linijki kodu i to, czy ją pisać czy nie, zostawię Tobie, drogi Czytelniku :).

Żeby to zapisywanie (w odpowiednim miejscu!) i usuwanie działało, należy znać starą nazwę (aby wiedzieć, co usuwać), nową nazwę – żeby wiedzieć jak nazwać nowy plik, i ścieżkę, aby wiedzieć gdzie to wszystko ma się dziać (oczywiście w bieżącym folderze).

Mamy więc deklarację zmiennych i przypisywanie do nich wartości:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim NowaNazwa As String, Sciezka As String, StaraNazwa As String
       
    StaraNazwa = ThisWorkbook.Name
    NowaNazwa = Dane.Range("Komorka") & ".xlsm"
    Sciezka = ThisWorkbook.Path & "\"
    
End Sub

W sytuacji, gdy nowy i stary plik mają tę samą nazwę (zakładam, że może się zdarzyć taka sytuacja) – nie będziemy wykonywać żadnej operacji, ponieważ nazwa pliku jest poprawna. Przerwiemy wtedy działanie makra. Robi to poniższa linijka:

    If NowaNazwa = StaraNazwa Then Exit Sub

Jeśli jednak nazwy się różnią (o to w sumie chodzi), zostaje teraz już zapisanie pliku pod nową nazwą (Zapisz jako):

    ThisWorkbook.SaveAs Sciezka & NowaNazwa

… i skasowanie poprzedniego pliku (jeśli nie chcesz kasować – tej linijki nie pisz):

    Kill Sciezka & StaraNazwa

Śmieszna instrukcja, prawda? 🙂 Tylko uwaga! Bardzo niebezpieczna, ponieważ ona po prostu usuwa plik z dysku! BTW: dlatego też w pliku do pobrania, który znajdziesz pod koniec artykuły, w kodzie nie ma tej linijki, aby Twój antywirus nie zablokował pobierania ;). Bezpieczeństwo przede wszystkim!

Jeszcze do tego kodu warto dodać wyłączanie komunikatów np. o nadpisaniu pliku (gdy nowy i stary mają tę samą nazwę). Wszystko razem wygląda tak:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim NowaNazwa As String, Sciezka As String, StaraNazwa As String
    
    StaraNazwa = ThisWorkbook.Name
    NowaNazwa = Dane.Range("Komorka") & ".xlsm"
    Sciezka = ThisWorkbook.Path & "\"
    
    If NowaNazwa = StaraNazwa Then Exit Sub
    
    Application.DisplayAlerts = False
    
    ThisWorkbook.SaveAs Sciezka & NowaNazwa
    Kill Sciezka & StaraNazwa
    
    Application.DisplayAlerts = True
End Sub

PS W każdym miejscu tego kodu, gdzie występuje ThisWorkbook, można użyć słówka kluczowego me. W tym przypadku będzie ono oznaczało to samo.

Wrzucam jeszcze screen edytora – zwróć szczególną uwagę na zaznaczone fragmenty:

Kod w edytorze

Kod w edytorze

Mam nadzieję, że opisane powyżej makro ułatwi Ci pracę. Jeśli znajdziesz w nim wartość – miło mi będzie, jak udostępnisz ten wpis innym. Może im też się przyda? Może spędzili dużo czas i przeszukali pół Internetu, żeby znaleźć takie rozwiązanie? A może tak było w Twoim przypadku, to wiesz o co chodzi 😉 Tym bardziej więc udostępnij proszę ten wpis! Razem możemy im ułatwić innym życie 🙂

A oto plik do pobrania (nie zawiera instrukcji kasującej plik!):
MalinowyExcel Zapisz plik pod nazwą wskazaną w komórce VBA dw.zip

 

I wideo:

 

 

 

Spodobał Ci się ten artykuł?

Jeśli TAK, zapisz się na newsletter, aby otrzymywać powiadomienia
o o nowościach na blogu.

Zapisując się, wyrażasz zgodę na przesyłanie Ci informacji o nowościach na tym blogu. Zgodę możesz w każdej chwili wycofać (szczegóły).

Tagi , , , , , , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *