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:
- 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):
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ł !
Hej, tutaj trzeba byłoby skopiować jeden arkusz i potem założyć na niego ochronę arkusza.
Bardzo się cieszę, że film pomógł 🙂