Jednym z błędów, które mogą nam się przytrafić w codziennej pracy z VBA jest błąd 1004. Nie jest to błąd składni czy kompilacji – pojawia się później, podczas wykonywania kodu. Zazwyczaj przyczyną jest to, że kompilator nie może znaleźć obiektu, do którego chcemy się odwołać.
Błąd podczas…. ukrycia kolumn
Niecały miesiąc temu testowałem makro, którego celem było wprowadzenie pewnych zmian estetycznych w arkuszu. Ku mojemu ogromnemu zdziwieniu, kod zaczął wyrzucać błędy w linii odpowiadającej za ukrycie kolumn!
Zaskoczyło mnie to z dwóch powodów:
- Sama operacja wydaje się banalnie prosta.
- Do tej pory kod działał bez zarzutu!
Tym razem jednak, przy próbie uruchomienia makra, otrzymywałem błąd nr 1004 i komunikat Unable to set the Hidden property of the Range class.
Zaskakująca przyczyna błędu
Zacząłem więc szukać rozwiązania w internecie… Większość osób wskazywało na fakt, że arkusz może być chroniony, w moim przypadku tak jednak nie było.
Poświęciłem bodajże 2-3 godziny na znalezienie rozwiązania, aż w końcu natrafiłem na ten wpis z 2007 roku. Autor pisze, że należy sprawdzić czy w komórkach, które chcemy ukryć nie znajdują się … komentarze.
Pomyślałem sobie „a co ma piernik, do wiatraka?”, ale na wszelki wypadek sprawdziłem również ten trop.
To było to! Faktycznie, okazało się, że w mojej tabeli zawarty był jeden niewinny komentarz i próba ukrycia całej kolumny powodowała błąd.
Jest to dziwne, bo w przypadku ręcznego ukrycia kolumn zawierających komentarze, nie ma żadnego problemu. Problem pojawia się, gdy chcemy to zrobić za pomocą VBA.
Reasumując. Warunkiem koniecznym ukrycia wierszy/kolumn jest wcześniejsze usunięcie komentarzy z komórek (metoda ClearComments, a nie instrukcja SpecialCells(Type:=xlComments).Clear).