EntireColumn vs. Columns – Dopasowanie szerokości kolumn

Odwołania do obiektu Range

EntireColumn i Columns to obiekty, które przynależą do innego obiektu jakim jest zakres komórek – Range. Do obiektu Range mogę odwoływać się poprzez Selection (wtedy mam do czynienia ze wszystkimi zaznaczonymi komórkami), albo ActiveCell (zawsze jedna komórka).

różnica między Selection i ActiveCell

Na powyższym obrazku widać, jak odwołanie przez Selection i ActiveCell dają różne rezultaty, kiedy chcę pobrać adres obiektu. Aktywna komórka może być tylko jedna i jeśli mam zaznaczonych więcej komórek to będzie nią ta biała.

Czy EntireColumn i Columns zawsze robi różnicę?

Wrócę teraz do obiektu, który przynależy do Range’a, a reprezentuje kolumnę, w której nasz obiekt się znajduje. Różnica pomiędzy Columns, a EntireColumn w pewnych sytuacjach nie będzie zauważalna. Czyli oba polecenia mogą dać te same wyniki.

Aby zaprezentować działanie obu odwołań wykorzystam metodę Autofit, czyli dopasowanie wielkości do zawartości. W dwóch kolumnach wprowadziłem ciąg znaków. W wierszu trzecim ciągi są krótsze niż w wierszu piątym.

przykładowe dane

Po zaznaczeniu zakresu od B3 do C5 nie będzie miało znaczenia, czy zastosuję polecenie Selection.Columns.Autofit, czy Selection.EntireColumn.Autofit. Oba polecenia odwołają się do kolumn zaznaczenia i spowodują wyrównanie szerokości kolumn do zawartości komórek z najdłuższym ciągiem tekstowym.

Różnica pokaże się dopiero w momencie, gdy zaznaczę tylko komórki od B3 do C3 i użyję odwołania Columns.

nieodwołanie się do obiektu EntireColumn

Efekt będzie taki, że szerokość kolumn zostanie dopasowana do zawartości komórek w zaznaczonym wierszu. Gdybym jednak użył odwołania EntireColumn, szerokość kolumn dopasowałaby się do komórki zawierającej najdłuższy ciąg tekstowy w całej kolumnie.

EntireColumn w praktyce

Stworzymy teraz wspólnie Event, który wykorzysta metodę Autofit i w momencie zarejestrowania zmiany w arkuszu dopasuje szerokość kolumny do ostatniej zmienianej komórki.

W Edytorze VBA przechodzę do okna kodu arkusza przez kliknięcie w niego dwukrotnie LPM, albo wybraniu polecenia View Code z menu kontekstowego. Po lewej stronie okna z listy rozwijanej wybieram Worksheet, a z listy po prawej stronie wybieram Change.

event Worksheet_Change pod zastosowanie obiektu EntireColumn

Przy wyborze obiektu Worksheet domyślnym Eventem jaki się pojawia jest SelectionChange, ale nie jest nam potrzebny więc można go usunąć.

Event Change zapisuje obiekt Target, czyli miejsce, w którym została dokonana zmiana. Wykorzystajmy Target do tego, aby właśnie w jego kolumnie dopasowywać szerokość kolumny do wprowadzonej do komórki wartości.

Prezentacja błędnego Eventu, w którym nie użyłem obiektu EntireColumn

Zastosowanie w tym wypadku odwołania do obiektu Columns było błędem, ponieważ nowe wartości mogą być krótsze od wcześniej wprowadzonych i teraz kolumny zrobiły się zbyt wąskie. Wprowadźmy więc zmianę i zamiast Columns użyjemy EntireColumn.

Obiekt EntireColumn dla Targetu

Tym razem mimo tego, że wprowadziłem krótsze ciągi tekstowe, event Change dopasował szerokość kolumn do najdłuższego wpisu w całej kolumnie.

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

Share on facebook
Share on linkedin
Share on twitter

2 thoughts on “EntireColumn vs. Columns – Dopasowanie szerokości kolumn”

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *