fbpx

Zapis nowej wersji pliku z kolejnym numerem w nazwie (VBA)

12.04.2019 | ECP3, Makra VBA

Czyli krótko o prostym wersjonowaniu plików

W jednym z poprzednich artykułów pokazałam sposób na to, aby podczas zamykania pliku, zapisywał się on pod nazwą wskazaną w komórce. Chodziło o to, aby mieć cały czas jeden plik, tylko z inną nazwą. Dzisiaj natomiast skoncentruję się na tym, aby tworzyć kolejne wersje plików, każdy z kolejnym numerem. Użytkownik będzie decydował o tym, jak ma się nazywać plik (jakie słowo kluczowe ma zawierać), a makro będzie automatycznie nadawało kolejny numer.

Poprzednie pliki – wcześniejsze wersje – zostaną na dysku (nie będą kasowane).

Dodatkowo, to użytkownik będzie uruchamiał makro, czyli decydował o tym, kiedy nowa wersja ma zostać stworzona. Oczywiście, jeśli chcesz, aby takie wersjonowanie działo się za każdym razem, gdy zamkniemy plik – kod trzeba będzie umieścić wewnątrz zdarzenia BeforeClose, tak, jak w poprzednim artykule.

Nasze makro będzie potrzebowało do swojego działania 2 komórek, najlepiej umieszczonych w roboczym arkuszu. Np. tak:

Formatka

  • Słowo kluczowe, czyli takie, jakie ma wystąpić w nazwie pliku uzupełnia użytkownik. Na powyższej formatce jest ono w komórce C3, którą nazwałam Komorka.
  • Numer wersji, jest uzupełniane przez makro. U mnie jest to komórka C4, którą nazwałam Numer.

Zaczynamy!

Logika makra

Cała logika to po prostu zapisywanie pliku pod odpowiednią nazwą i w odpowiednim miejscu (tam, gdzie obecnie jest plik). Nazwę stworzymy pobierając wartość z komórki Komorka, i skleimy to z numerem, który będzie generowało makro, na podstawie numeru, który obecnie znajduje się w żółtej komórce Numer. Do znajdującej się tam liczby dodamy 1. Za pierwszym razem komórka ta jest pusta, czyli równa zero. Po dodaniu 1 otrzymamy więc pierwszy numer: 1.

Możemy jeszcze dorzucić informację o roku lub inną, np. rok-mc-dzień-godzina –  w zależności od potrzeb. Kolejność tych wpisów dla makra nie ma znaczenia – ma za to dla nas. Ja lubię datę umieszczać na początku lub na końcu tekstu, aby się dobrze po niej sortowało. W tym wpisie, aby uprościć, dopiszę na końcu nazwy pliku rok: 2019.

Ponieważ to user będzie decydował o tym kiedy stworzyć nową wersję (kliknie przycisk Zapisz wersję), umieścimy więc makro w oddzielnym module. Wstawmy go:

  • Alt + F11, aby przejść do edytora VBA
  • Menu Insert/ Module

Procedura – kod

Najpierw definiujemy zmienne:

Sub StworzWersje()
    Dim NowaNazwa As String, Sciezka As String, Slowo As String
    Dim Numer As Range, NowyNumer As Long

Slowo to będzie słowo kluczowe pobierane od usera. Numer, to komórka, w której będzie numer poprzedniej wersji.

OK, teraz pobieramy dane do zmiennych:

    Sciezka = ThisWorkbook.Path & "\"
    Slowo = Sheets("Dane").Range("Komorka").Value
    Set Numer = Sheets("Dane").Range("Numer")

Teraz kwestia określenia numeru, jaki ma zostać nadany naszemu plikowi. Będzie to liczba o 1 większa niż poprzednia:

        NowyNumer = Numer.Value + 1

A teraz wpiszemy tę wartość do komórki, aby kolejny plik został zapisany z odpowiednią liczbą:

        Numer.Value = NowyNumer

I dalej, tworzymy nazwę, którą nadamy plikowi – jest to połączenie słowa kluczowego z numerem, oraz dopiskiem roku (2019) i rozszerzenia pliku. Poszczególne części nazwy będę oddzielała podkreśleniem „_”. Dodatkowo, numer pliku podam zawsze w formie 3-cyfrowej, aby zapisane pliki dobrze się sortowały. W tym celu użyję funkcji Format, odpowiednika excelowej funkcji TEKST (umie ona wyświetlić liczbę w określonym „formacie” niestandardowym – więcej o nich możesz dowiedzieć się z tego webinaru). Sklejanie to ta linijka:

    NowaNazwa = Slowo & "_" & Format(NowyNumer, "000") & "_2019.xlsm"

I na koniec zostaje już tylko zapisanie pliku pod wyżej ustaloną nazwą:

    ThisWorkbook.SaveAs Sciezka & NowaNazwa
End Sub

Kod w całości wygląda tak:

 Sub StworzWersje()
    Dim NowaNazwa As String, Sciezka As String, Slowo As String
    Dim Numer As Range, NowyNumer As Long

    Sciezka = ThisWorkbook.Path & "\"
    Slowo = Sheets("Dane").Range("Komorka").Value
    Set Numer = Sheets("Dane").Range("Numer")
        NowyNumer = Numer.Value + 1
        Numer.Value = NowyNumer
    
    NowaNazwa = Slowo & "_" & Format(NowyNumer, "000") & "_2019.xlsm"
       
    ThisWorkbook.SaveAs Sciezka & NowaNazwa
End Sub

Teraz pozostaje nam już tylko wstawienie przycisku i podpięcie do niego makra. Czynności te opisywałam już na blogu – tutaj, przy okazji makra usuwającego rekordy. Gotowy przycisk można umieścić w dowolnym arkuszu pliku. Tak, by było Tobie wygodnie.

I tyle – makro będzie pięknie śmigać!

 Tutaj jest plik z gotowcem do pobrania:

MalinowyExcel Zapisz plik z kolejnym numerem w nazwie VBA dw.zip

 

A tutaj wersja wideo (pojawi się wkrótce):

 

 

 

 

Jeżeli chcesz lepiej poznać makra i VBA zapisz się na listę zainteresowanych kursem Excel w codziennej pracy cz. 3! Podczas oczekiwania na kurs będę Ci wysyłała informacje, ciekawostki i excelowe triki. Bezpłatnie! 

Pomogłam Ci? Postaw mi wirtualną kawę! →

Przeczytaj podobne wpisy

Kategorie

2 komentarze

  1. Witam. Zastanawia mnie modyfikacja tego kodu tak aby zapisało tylko aktywny arkusz do nowego pliku blokując edycje danych tego nowego arkusza. Super filmik, bardzo mi pomógł !

    Odpowiedz
    • Hej, tutaj trzeba byłoby skopiować jeden arkusz i potem założyć na niego ochronę arkusza.
      Bardzo się cieszę, że film pomógł 🙂

      Odpowiedz

Wyślij komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *