VBA - Ukryty arkusz - jak go przenieść, albo skopiować?

Ukryty arkusz – jak go przenieść, albo skopiować?

Ukryty arkusz może sprawić problem?

Ukrywanie arkuszy to standardowe działanie w Excelu, które pozwala na odwoływanie się do danych, które nie są bezpośrednio widoczne przez użytkownika.

Czy taki ukryty arkusza może sprawić problem, w momencie próby jego skopiowania, lub przeniesienia za pomocą makra? Odpowiedź na to pytanie brzmi: TO ZALEŻY. A zależy od poziomu ukrycia czyli tego, czy własność Visible ma status xlSheetHidden, czy xlSheetVeryHidden ( o ukrywaniu arkuszy możesz poczytać w tym wpisie https://www.dariuszskorniewski.pl/visible-ukrywanie-arkusza/ ).

Na początek stworzyłem skoroszyt z 3 arkuszami i jeden z nich o nazwie Arkusz2 ukryłem, a dokładniej nadałem mu wartość xlSheetHidden dla własności Visible. Można to zrobić z poziomu skoroszytu wybierając opcję Ukryj z menu kontekstowego dla konkretnego arkusza.

menu arkusza
ukryty arkusz

Co można zrobić z ukrytym arkuszem?

W sumie to prawie wszystko. Jeśli spróbujesz na ukrytym arkuszu wykonać operację przesunięcia, lub kopiowania to zadziała bez mruknięcia.

przenoszenie arkusza

Podając lokalizację docelową w innym istniejącym skoroszycie operacja również się wykona.

przenoszenie arkusza do innego zeszytu

Jeśli jednak chciałbym przenieść, lub skopiować arkusz do innego skoroszytu, który nie istnieje to mogę napotkać błąd. Aby wykonać taką operację musisz wykorzystać polecenie Copy, lub Move bez podania argumentów. Na szczęście takiej operacji nie stosuję super często.

błąd kopiowania arkusza

Mocno ukryty arkusz

Cała zabawa zaczyna się w momencie, gdy zmienię własność Visible na xlSheetVeryHidden. Taki arkusz nie pozwala już na wykonanie operacji kopiowania, czy przenoszenia. Bez znaczenia, czy w ramach różnych skoroszytów, czy też w ramach tego samego.

ukryty arkusz - mocne ukrywanie

Przy próbie chociażby kopiowania pojawia się komunikat błędu.

błąd kopiowania arkusza

I co teraz będzie?

Skoro stan bardzo ukryty nie pozwala na wykonanie operacji, to nie pozostaje nic innego jak zmiana tego stanu. Dlatego przed wykonaniem operacji docelowej zmieniam jego widoczność, a na koniec przywracam do stanu pierwotnego.

Warto, abym sprawdził najpierw stopień ukrycia arkusza. Własność Visible oprócz tego, że może przyjąć wartość xlSheetVeryHidden, może również przyjąć wartość adekwatną w postaci liczby 2. Jeśli sprawdzę jaka jest wartość własności Visible dla Arkusza2 to otrzymam wynik 2.

Wystarczy teraz zastosować instrukcję warunkową, która wykona operację odkrywania arkusza, przenoszenia w odpowiednie miejsce i ponownego ukrycia. Oczywiście o ile warunek zostanie spełniony.

ukryty arkusz - kopiowanie ze zmianą widoczności

Ten kod jak dla mnie zawiera zbyt wiele razy frazę Sheets(“Arkusz2”), dlatego pora stworzyć zmienną obiektową typu Worksheet i przypisać jej ten arkusz.

dodanie zmiennej obiektowej

Widoczność i nazwa nowego arkusza

W przypadku przenoszenia arkusza takie makro byłoby już w porządku. Dopiero przy kopiowaniu pojawia się delikatny problem. Otóż skopiowany arkusz jest lekko ukryty, więc wypadałoby zmienić wartość Visible na xlSheetVeryHidden. Dlatego też po operacji kopiowania dodaję linijkę kodu, która odwoła się do ostatniego arkusza. Ostatniego, ponieważ kopię arkusza wstawiłem na końcu ) i zmieni wartość własności Visible na 2.

ukryty arkusz - kopiowanie

Spodobał Ci się artykuł ? Udostępnij go znajomym.

Share on facebook
Share on linkedin
Share on twitter

Leave a Comment

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