• Zapisz się na newsletter, aby otrzymywać powiadomienia o najnowszysch wpisach.

Lista rozwijana wielokrotnego wyboru (odsłona 2)

Czyli wybieranie z listy ROZWIJANEJ więcej niż jednej pozycji

W poprzednim wpisie pokazywałam sposób na stworzenie listy wielokrotnego wyboru. Lista ta była formantem formularza, czyli „pływającym” w arkuszu obiektem, który mogliśmy umieścić w wybranym przez siebie miejscu. Rozwiązanie to było świetne, gdy mieliśmy mało komórek, do których chcieliśmy wpisać wartość z tej listy. Gorzej jest jednak, gdy mamy wiele komórek, w której, o zgrozo!, każda ma inną listę i z każdej z nich chcemy wybierać po kilka wartości do komórki. Masakra!

Sytuacje takie jednak jak najbardziej się zdarzają, więc dziś o tym, jak sobie wtedy radzić. Znów będzie o VBA i to nie takim oczywistym niestety. I znów będą zdarzenia :). Znów, ponieważ już ostatnio o nich pisałam, np. przy otwieraniu pliku na konkretnym arkuszu czy kasowaniu wpisu na zależnej liście rozwijanej.

Teraz więc formatka będzie znacznie łatwiejsza:

Formatka

Formatka

Czytaj dalej

Lista wielokrotnego wyboru (odsłona 1)

Czyli wybieranie z listy więcej niż jednej pozycji

Wiele razy korzystałam z list w formie formantów formularza, aby pobrać z nich wartość i wpisać do komórki. Nigdy jednak nie potrzebowałam wybrać z takiej listy kilku wartości i wpisać ich do komórki. Z taką potrzebą zgłosił się do mnie Wojtek. Temat mega mnie zaciekawił i pomyślałam, że Was też może.

Czyli sytuacja jest taka, że z listy rozwijanej chcemy wybrać kilka wartości i chcemy wpisać je do komórki tak, żeby każda pozycja listy była w nowym wierszu tej samej komórki. Nie jest to może zgodne ze „sztuką”, natomiast życie jest życiem i tak czasem chcemy albo jesteśmy zmuszeni. BTW: i tak cała trudność będzie w pobraniu wartości z listy, a samo wpisanie ich to już pikuś ;).

Całość będzie miała taki efekt:

 

Oczywiście bez VBA się tutaj nie obędzie, więc bez zbędnego przedłużania… do dzieła!

Czytaj dalej

Kasowanie wartości zależnej listy rozwijanej na długiej liście (VBA)

Czyli automatyczne kasowanie wartości po raz drugi

Ostatnio, w tym wpisie, pokazałam jak sprawić, żeby wpis na zależnej liście rozwijane sam się kasował, gdy tylko zostanie zmieniona wartość kategorii, czyli komórki, od której nasza lista rozwijana zależy. Wszystko fajnie, natomiast rozwiązanie to uwzględniało, że mamy tylko dwie komórki: z kategorią i podkategorią. Problem zaczyna się pojawiać, gdy tych komórek mamy więcej – całą listę. Taką sytuację pokazuje poniższy rysunek:

Formatka

Formatka

Czyli chodzi o to, że jak zmienię wartość listy rozwijanej w kolumnie B – ma się wykasować wartość Podkategorii (kolumna C) z odpowiedniego wiersza. Znamy kolumnę komórki, która ma zostać wykasowana (C), ale nie znamy wiersza, gdyż zależy on od tego, którą komórkę wybierze użytkownik. Na tym właśnie polega cała trudność tego zadania.

Do jego rozwiązania znów posłużę się VBA, oczywiście zdarzeniem, ale tym razem będzie ono bardziej skomplikowane. Użyję do tego konstrukcji warunkowej IF (odpowiednik arkuszowej funkcji JEŻELI), właściwości Cells zakresu i jeszcze kilku innych trików 🙂

Czytaj dalej

Otwieraj plik zawsze na wybranym arkuszu (VBA)

Czyli słów kilka o zdarzeniach skoroszytu

Ostatnio ciągle piszę o zdarzeniach w Excelu i ten wpis również o tym będzie. Chodzi o to, żeby plik zawsze otwierał się na konkretnym arkuszu.

Czyli mamy plik np. z 4 arkuszami i chcemy, aby zawsze otwierał się on na arkuszu „Dane”, tak, jak na obrazku poniżej:

4 arkusze w pliku

4 arkusze w pliku

Aby to osiągnąć, należy stworzyć zdarzenie skoroszytu w VBA.

Czytaj dalej

Zależna lista rozwijana – automatyczne usuwanie podkategorii po zmianie kategorii (VBA)

Czyli zależne listy rozwijane – kolejna odsłona

To już któryś z kolei wpis o zależnych listach rozwijanych. Dziś jednak będzie trochę inaczej, ponieważ samych list nie będę tykać, tylko pokażę jak skasować wpis na zależnej liście rozwijanej, po zmianie wyboru z pierwszej listy (tej, od której jest zależna).

Formatka jest prosta: potrzebujemy dwóch list rozwijanych (żółte pola): pole kategorii i pole podkategorii:

Formatka

Formatka

Po wyborze kategorii, do pola podkategorii wczytuje się odpowiednia lista rozwijana, w zależności od wyboru kategorii (o tym, jak to zrobić pisałam np. tutaj). Problem jednak polega na tym, że jak wybierzemy jakąś kategorię i podkategorię, a potem zmienimy kategorię – wybrana wcześniej podkategoria zostanie i, oczywiście, nie będzie pasowała do nowej kategorii. Można ją oczywiście wykasować, ale mi chodzi o to, aby trochę użytkownika wyręczyć i zrobić, aby Excel sam kasował wartość podkategorii, gdy zmieni się kategoria. Natomiast to już jest pole do popisu dla VBA i o tym będzie dzisiejszy wpis.

Czytaj dalej

Zależna lista rozwijana z nieposortowanych danych – zdarzenie VBA

Czyli co zrobić, aby wpisy na liście zmieniały się dynamicznie, kiedy dopisujemy dane

Przyznam, że sporo namęczyłam się, aby znaleźć rozwiązanie tego problemu. Jak już jakieś wymyśliłam, obalałam je, bo nie do końca by działało… Wymyśliłam nawet funkcję tablicową napisaną w VBA, która idealnie zwracałaby tablicę z wynikami, problem jednak polegał na tym, że lista rozwijana potrzebuje ZAKRESU, a moja wyimaginowana funkcja dawała jej tablicę. Gdyby ta tablica znajdowała się w jakimś zakresie, to ok – wszystko pięknie by działało. Ale to byłoby bez sensu: musiałabym mieć tych zakresów wiele i to nie wiadomo jakich rozmiarów… Z kolei nie mogłam napisać funkcji zwracającej zakres, ponieważ zakresu de facto nigdzie nie mam… i tak w koło Macieju.

W końcu wymyśliłam rozwiązanie, które po prostu tworzy listę rozwijaną w momencie kliknięcia w komórkę, w której lista powinna się znajdować. To natomiast jest już procedura zdarzenia VBA, więc jest ciut bardziej skomplikowane. Na szczęście żeby działało, nie trzeba tego rozumieć – wystarczy przekopiować kod 😉

Czytaj dalej

Wyodrębnianie gramatury produktów z ich nazwy, czyli liczba z tekstu

Czyli wyodrębniania liczby z tekstu za pomocą funkcji w VBA

W dzisiejszym wpisie sytuacja, której nie życzę nikomu.Sytuacja, która jednak się zdarza i to jak się okazuje często… Najlepiej zobrazuje to screen poniżej:

Formatka

I chodzi oczywiście o wyciągnięcie gramatury z nazwy produktu. Jest wiele fajnych metod na wyciąganie liczb z tekstu, jednak ta sytuacja jest wyjątkowo wredna, ponieważ te liczby są różnej długości, w różnych miejscach w tekście, są często dziesiętne, a nawet jak są całkowite, to zapisywane np. tak: 1,0 zamiast po prostu 1. Próbowałam wielu sposobów na ten przypadek, ale po wielu nieprzespanych nocach stwierdziłam, że jednak VBA będzie tutaj najlepszym wyjściem. Zawsze staram się unikać funkcji tworzonych w VBA, ponieważ są wolniejsze, muszą być przechowywane w pliku z rozszerzeniem .xlsm lub .xlsb itp. Jednak tutaj stwierdziłam, że to najlepsze wyjście.

Czytaj dalej

VBA: wydruk na szerokość 1 kartki

Dopasuj wszystkie kolumny do jednej strony

Jeśli chcecie ustawić w Excelu, aby tabelka drukowana była na szerokości jednej strony – wystarczy to zrobić w ustawieniach strony albo od razu w podglądzie wydruku, wybierając opcję: Dopasuj wszystkie kolumny do jednej strony. Efekt będzie taki, że Excel trochę zmniejszy czcionkę naszej tabelki na wydruku (w arkuszu zostanie taka, jaka była), natomiast tabelka na szerokość zmieści się w 1 stronie. Powstaje jednak pytanie: jak to zrobić za pomocą makra? Jak nagramy makro z tym jednym ustawieniem – oto, co generuje Excel (musiałam zmniejszyć czcionkę, bo mi się nie zmieściło na ekranie!)::

Ta prosta opcja w nagranym makrze

Ta prosta opcja w nagranym makrze

Czytaj dalej

Mikołajkowy konkurs z nagrodami o makrach (VBA)!

malinowyexcel-mikolajkowy-konkurs-o-makrachW czerwcu, kiedy ruszył konkurs o tabelach przestawnych,  obiecałam, że będzie kolejny – tym razem o makrach. Makra… tak… temat gorący i jakże pożądany w dzisiejszych czasach, gdzie liczy się efektywność pracy i oszczędność czasu. Każdy chce robotę mieć zrobioną na już (albo na wczoraj) i to jak najmniejszym nakładem pracy. Zwłaszcza jeśli dotyczy to tematów powtarzalnych i… nudnych 😉 Makra właśnie po to są, aby tę pracę przyspieszać i ułatwiać, dzięki czemu pozwalają nam zająć się tematami naprawdę wymagającymi udziału człowieka. Brzmi pięknie, tylko jeszcze trzeba się tego nauczyć… Myślę, że dzisiejszy konkurs jest dla tych wszystkich, którzy własnie tego chcą (lub znają kogoś, kto by chciał – w końcu idą święta :)).

A teraz szczegóły konkursu…

Czytaj dalej

Uruchamianie makra za pomocą przycisku w arkuszu (VBA)

W poprzednim artykule opisywałam makro, które usuwa wiersze z pustymi danymi. Omawiałam też kilka sposobów na uruchomienie makra: skróty klawiszowe oraz ikonki na wstążce i pasku narzędzi. Były to sposoby, które sąwygodne dla twórcy makra. Klawisz F5 naciskamy, gdy jesteśmy w edytorze VBA, w kodzie. Użytkownik nie będzie z tego korzystał – gwarantuję 🙂 Ze skrótu klawiszowego Alt + F8 też nie skorzysta. Ze wstążki też nie – nie będzie wiedział, gdzie szukać. Trzeba mu trochę uprościć życie. Właśnie – jemu uprościć, a tobie – jako twórcy – zrobić trochę PR-u profesjonalisty 😉 Na szczęście istnieje jeszcze milion innych sposobów, żeby makro odpalić…

Na przykład przyciskiem z poziomu arkusza, co wygląda tak:

Przycisk w arkuszu uruchamiający makro

Przycisk w arkuszu uruchamiający makro

Efektownie, prawda? I nie wszyscy umieją to zrobić 😉 A ty po przeczytaniu tego artykułu będziesz umiał 🙂

Czytaj dalej