Na dzisiejszej lekcji zajmę się przypadkiem, w którym chcę aby we wszystkich plikach w wybranym folderze każdy arkusz miał tę samą nazwę z przypisanym kolejnym numerem. Przygotowałem folder Nowy na dysku C i taką ścieżkę zamieszczę w makrze. Teraz stworzę kod który bez względu na to ile napotka plików i zakładek we wskazanym folderze, zmieni nazwę wszystkich zakładek na „Zadanie 1, Zadanie 2, Zadanie 3 itd. w zależności od tego który to arkusz.
Użyje do tego pętli Do Loop dla plików i For Each dla arkuszy. Zaczynam od stworzenia nowej procedury i na początku definiuję zmienne lokalne. Zmienna ark as Worksheet, sciezka as String (do nadania adresu wybranemu folderowi), i zmienna plik as String (nazwa pliku).
Zaczynam od tego że przypisuję wartość zmiennej sciezka (należy ją zmodyfikować pod własny przypadek). Koniecznie trzeba pamiętać o zamknięciu ścieżki backslashem. Teraz zmienna Plik dzięki poleceniu Dir() ze wskazaniem ścieżki do folderu przyjmie wartość, która jest nazwą pierwszego pliku w folderze.
Otwieram pętlę Do Loop, która będzie przechodziła po wszystkich plikach. Zaczynam od otwarcia pierwszego pliku w folderze (połączenie dwóch zmiennych daje pełny adres pliku) i aktywuję otwarty plik.
Teraz uruchamiam pętlę For Each dla arkuszy znajdujących się w aktywnym pliku. Pętla zmieni nazwę wszystkich arkuszy na Zadanie i nada im kolejne numery zgodne z kolejnością ich występowania.
Zamykam teraz aktywny plik i zachowuję automatycznie wprowadzone zmiany. Po zmianie nazw zakładek w pierwszym pliku zmienna plik przyjmuje nową wartość. Użycie polecenia Dir bez wskazania ścieżki do folderu spowoduje, że zostanie znaleziony kolejny plik i zmienna przyjmie jego nazwę.
Zamykam pętlę Do Loop przez polecenie Until plik=””, czyli jeżeli zmienna plik przyjmie za wartość pusty ciąg znaków, wtedy pętla musi się zakończyć.
Jeżeli wolicie instrukcję w postaci filmu to zapraszam na YouTube:
2 thoughts on “Masowa zmiana nazwy zakładek”
Ja mam w jednym folderze różne w nazewnictwie podfoldery z różnymi plikami Excela o różnych nazwach. Da się tą metodę zastosować w takim przypadku?
Mirku, żeby dostawać się do podfoloderów trzeba najpierw te podfoldery wykrywać, więc tutaj musiałbyś już użyć funkcji Dir z parametrem vbDirectory Dir(sciezka, vbDirectory) . Nie robiłem jeszcze takiego przykładu, ale dałoby się to zapętlić.