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.
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.
Podając lokalizację docelową w innym istniejącym skoroszycie operacja również się wykona.
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.
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.
Przy próbie chociażby kopiowania pojawia się komunikat błędu.
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.
Ten kod jak dla mnie zawiera zbyt wiele razy frazę Sheets(„Arkusz2”), dlatego pora stworzyć zmienną obiektową typu Worksheet i przypisać jej ten arkusz.
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.