Kategorie powiązane:

Tworzenie własnej wstążki paska dla pliku dodatku

HintMine

W trakcie prowadzonych przeze mnie szkoleń VBA często spotykam się z pytaniami mniej więcej takiej treści:

 

„jak to jest zrobione, że podczas uruchamiania plików z narzędziami od firm zewnętrznych w Excelu pojawia się dodatkowa wstążka/pasek, na którym znajdują się przyciski wywołujące potrzebne narzędzia/programy/makra/formularze”?

 

I ja też taką wstążkę/pasek w swoich plikach chcę mieć :) a najlepiej jeszcze jakby były tam przyciski nie tylko do makr z tego pliku ale też do wszystkich napisanych w VBA procedur i funkcji, których najczęściej w swojej pracy używam. A co! jak już robić to po całości czyli „albo grubo albo wcale” ;)

 

Z racji postanowienia noworocznego postanowiłem zebrać wreszcie całe wyjaśnienie w jednym miejscu a nie wysyłać każdemu pytającemu maila… hmm czyli jak się nad tym zastanowić, to znów wyszło, że ten artykuł powstał jednak z mojego lenistwa… :/ Ok najważniejsze, że się pojawił a dlaczego to się stało to może mniej istotne ;)

 

Zaczynamy!

Oczywiście jak często wspominam na szkoleniach, to tylko jeden ze sposobów (moim zdaniem jeden z najprostszych i najłatwiejszych do późniejszego samodzielnego rozbudowywania :) Ale mamy też kilka innych (np. dodatki COM, czy obiektu CommandBar, które opiszę w następnym poście…)

 

Po pierwsze posiadacze Excela 2010, 2013 i od niedawna 2016 mogą nie do końca „widzieć” problem ponieważ jak chcą dodać sobie nową wstążkę robią to poprzez:

 

PLIK–>OPCJE–>DOSTOSOWYWANIE WSTĄŻKI–>(po prawej stronie okna) NOWA KARTA

 

Następnie wystarczy z lewej strony okna z rozwijalnej listy „wybierz polecenia z:” wybrać „makra” i już można je umieszczać na naszej nowej wstążce :)

 

Gdzie w takim razie jest problem ?

Napiszę w punktach niedoskonałości takiego rozwiązania (to co mi tak na szybko przyszło do głowy):

  • Nie działa to pod Excelem 2007
  • Nawet przy Excelu 2010, 2013 itd. rozwiązanie to będzie działało tylko na „naszym” komputerze a w momencie, gdy wyślemy komuś plik to u niego tej dodatkowej wstążki nie będzie.
  • Żeby móc skorzystać z dowolnego makra w dowolnym pliku trzeba wszystkie makra trzymać w pliku personal.xlsb czyli tzw. „skoroszycie makr osobistych” a jak wiedzą moi kursanci ma on swoje wady i zalety (cytując klasyka „plusy dodatnie i plusy ujemne” ;) Bo np. nie da się go w prosty sposób włączać i wyłączać… (chociaż… wiadomo jak się chce to wszystko się da… :)

Co w takim razie zrobić ? jak sobie z tą sytuacją poradzić ? 

 

Oczywiście napisać wstążkę samodzielnie :)

 

Bez stresu, to nic skomplikowanego. Właściwie cała operacja zajmie nam ok 10 minut (jak ktoś szybciej czyta to oczywiście krócej ;) Najważniejsze kroki przedstawię w 2 punktach (takich jak poniżej) oczywiście każdy z punktów poniżej rozwinę :)

  • Musimy mieć plik z makrami, do którego chcemy dodać naszą własną wstążkę
  • Potrzebny będzie programik, który wygeneruje nam odpowiedni kod (żeby nie trzeba było pisać nic samemu)

Ad 1. PLIK

Tutaj zdecydowanie polecam zrobić sobie plik dodatku czyli po naszemu „add-ina”. Jak ktoś chce sobie odświeżyć co to jest addin i czemu ma służyć, to zapraszam do jednego z poprzednich artykułów, a konkretnie tutaj: do czego służy plik dodatku?

 

A dlaczego dodatek ?

 

ponieważ:

  • można go łatwo włączyć i wyłączyć
  • napisane w nim makra i formularze VBA mogą być używane na dowolnym pliku Excela
  • w łatwy sposób można udostępnić dodatek, żeby inne osoby w naszej firmie czy dziale mogły korzystać z napisanych przez nas makr
  • jeżeli udostępniamy dodatek w sieci firmowej GIGANTYCZNĄ ZALETĄ jest fakt posiadania tylko jednej wersji kodu makr z której korzystają wszyscy, czyli w przypadku gdy trzeba dokonać jakichś zmian, robimy to w jednym miejscu

 

Oczywiście własną wstążkę można dołączyć również do „zwykłego” pliku .xlsm czy też .xlsb (wasza decyzja :)

 

Ad 2. PROGRAMIK

Ok czyli mamy już plik, który będzie „tuningowany”.

 

Kolejną rzeczą którą potrzebujemy to Custom UI Editor. Cóż to jest i po co nam to?

 

Jest to DARMOWY programik stworzony przez Pana Trang Luu z teamu Microsoft Office User Experience. Narzędzie to można pobrać bezpłatnie (bez żadnych logowań, rejestracji itd.) ze stronki OPENXMLDeveloper.org (dla tych, którym nie chce się szukać podaję bezpośredni link:

http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2006/05/26/customuieditor.aspx

 

Programik jest nam potrzebny do tego, żeby „wstrzyknąć” xmlowy kod wstążki, do tuningowanego pliku (teraz pewnie część z Was pomyślała WTF??? ;)

 

Dla tych bojących się, od razu mówię NIE TRZEBA ZNAĆ JĘZYKA XML :)

 

Dobra fajnie ale co ma XML do Excela ?

Już piszę co i jak. Na prowadzonych przeze mnie szkoleniach VBA często pokazuję jak zbudowane są pliki „nowych” Exceli (czyli tych od 2007 w górę). Jest to o tyle ciekawe, że składają się one nie z jednego ale z kilkunastu (nie liczyłem dokładnie) plików XMLowych, które opisują jak dany plik Excela wygląda, działa, ile ma arkuszy, co te arkusze zawierają i całą masę innych ustawień i właściwości.

 

Kto musi „dotknąć” żeby uwierzyć niech zrobi taki test:

  • zakładam, że mamy w Windowsie włączony widok rozszerzeń plików (w dowolnym katalogu w Windowsie, klikamy w „opcje folderów i wyszukiwania”–>karta „widok”–>odznaczamy domyślnie zaznaczonego ptaszka przy „Ukryj rozszerzenia znanych typów plików” –> OK
  • teraz bierzemy jakiś standardowy plik Excela (np. u mnie będzie to kura.xlsx)
  • robimy kopię tego pliku (zawsze lepiej eksperymentować na kopii ;)
  • zamieniamy rozszerzenie na zip (czyli u mnie będzie to kura.zip)
  • rozzipowujemy powstały plik do katalogu kura i wchodzimy do niego.

I voila oczom naszym ukarze się wspomniana przeze mnie lista plików XML :)

 

Teraz musimy do tego zbioru dorzucić jeszcze jeden mały pliczek (a tak naprawdę 2 i to nie pliki a katalogi z plikami ;) ale to już właśnie zrobi za nas wspomniany wyżej Custom UI Editor.

 

Ten mały dorzucany pliczek będzie zawierał informacje o dodatkowej „naszej” wstążce, która ma się w tym konkretnie pliku wyświetlać.

 

Dlatego polecałem na początku, żeby plikiem nad którym będziemy pracować był addin, bo dzięki temu po dołączeniu addina wspomniana wstążka pojawi się w każdym otwartym Excelu (nowym pliku też) a po odłączeniu addina zniknie :)

 

  • Uruchamiamy więc Custom UI Editor(pobrany pliczek rozpakuje się i osadzi najprawdopodobniej w C:\Program Files (x86)\CustomUIEditor  :)
  • wchodzimy tam i klikamy w CustomUIEditor.exe
  • wchodzimy w File–>Open i otwieramy w tym programie nasz plik który chcemy stuningować żeby miał wstążkę
  • klikamy w Insert–>Office 2010 Custom UI Part (nawet jak macie offica 2013 czy 2016 a jeżeli macie offica 2007 to klikamy w 2007 … :)
  • ponownie Insert–>”Sample XML”–>”Excel a Custom Tab”
  • Powinno nam to wstawić na ekranie mniej więcej taki kod

Teraz edytujemy to, co się wstawiło, tylko ważna rzecz, nie używajmy polskich znaków. Edycję zaczynamy od czwartej linii

tab id to kodowa nazwa naszej wstążki i nie ma potrzeby jej zmiany
label to tekst który wyświetla się jako nazwa wstążki, czyli to zdecydowanie zmieniamy :) (np. na „moje toolsy”)
insertAfterMso tutaj podajemy nazwę wstążki, po której ma się pojawić nasza wstążka. Ja zawsze wpisuję tutaj „Developer” bo chcę żeby moje wstążki pojawiały się na końcu :)

 

kolejne 2 linie możemy skasować, bo są gotowe grupy przycisków (mamy je dostępne na zakładce „narzędzia główne”. Pierwsza to „schowek” (czyli ikony kopiowania, wycinania, wklejania) a druga to „czcionka” (czyli wielkość, rodzaj, kolor czcionki, tła itd.)

 

w dalszej kolejności mamy:

group id to jak poprzednio kodowa nazwa tylko tym razem grupy naszych przycisków, czyli nie zmieniamy
label to również jak poprzednio tekst który pojawi się na dole pod dodanym przez nas na wstążce przyciskami, czyli można zmienić na np. „raportowanie”.

 

Wreszcie możemy przejść do 3 linijek odpowiadających za guziki

id to znów kodowa nazwa przycisku, czyli nie zmieniamy(lub jak ktoś bardzo chce to zmienia ale bez spacji i polskich znaków)

label tekst który pojawi się na dole pod przyciskiem
size tutaj mamy dwie opcje „normal” czyli mały przycisk na pół wysokości paska i „large” na całą wysokość paska, wiadomo wybieramy large :)
onAction to bardzo ważna rzecz, mianowicie nazwa zdarzenia (programu) który będzie uruchamiał się po kliknięciu przycisku na naszym pasku. ALE UWAGA! nie podajemy tutaj nazwy naszej procedury VBA z pliku Excela a tylko nazwę makra która za chwilę je wywoła (zaraz opiszę to szerzej :) Ja tu najczęściej piszę coś w typie „wyw1”
imageMso to z kolei nazwa ikonki którą chcemy zobaczyć na naszym przycisku :D cały spis ikonek zamieszczam w pliku na końcu artykułu (plik Word 2010 więc 2007 niestety nie będą w stanie go odpalić ale są to rzeczy które można wygooglać) na razie proponuję da naszego przycisku ikonkę „HappyFace”, „SadFace” lub np. „Coffee” :)

 

Jak chcemy mieć więcej guzików na pasku to kopiujemy całą linię button, wklejamy pod spodem i edytujemy :)

 

Czyli np. tak:

gdy mamy już tyle guzików ile chcemy przechodzimy do kolejnej linijki, która zamyka naszą grupę z przyciskami tj.

kolejne 3 linie poniżej czyli:

To znów grupy ze standardowymi zestawami przycisków, które możemy usunąć.

Reasumując, powinniśmy uzyskać coś takiego:

Czyli cały kod mamy już napisany, teraz trzeba kliknąć w ikonę „Generate Callbacks” to jest ostatnia ikona na oknie naszego programu takie małe kreseczki nad menu INSERT (lub z niewiadomych dla mnie przyczyn czasem są pod menu INSERT)

 

O kliknięciu pojawi się na szarym tle coś takiego:

To są makra, które będą uruchamiane po naciśnięciu przycisków na naszym pasku. TE LINIE TRZEBA SKOPIOWAĆ (najlepiej gdzieś do notepada)

 

Następnie w oknie naszego UI Custom Editora klikamy po lewej stronie w nazwę naszego pliku (dzięki temu ikony staną się aktywne i będzie można zapisać plik)

 

Klikamy w zapisywanie pliku (w dyskietkę ;)

 

Zamykamy program UI Custom Editor

 

Już prawie koniec ;) Otwieramy teraz w Excelu nasz plik (normalnie, zwyczajnie w Excelu :)

 

Dodajemy nowy moduł (do tych wszystkich które już tam mamy) znaczy tak naprawdę nie trzeba dodawać nowego modułu ale staram się, żeby było jak najbardziej czysto, prosto i bez potencjalnych problemów :)

 

Wklejamy do tego modułu skopiowane wcześniej do notepada Callbacki

 

Między sub a end sub każdego callbacka wpisujemy wywołanie procedury która ma być odpalana po naciśnięciu danego przycisku czyli jeżeli ja robię to za pomocą Call, to moja dodawana linia będzie wyglądała tak:

a po wszystkim nasz gotowy callback w module pliku z naszą wstążką powinien wyglądać tak:

Zapisujemy nasz plik Excela (ten add-in) i to w sumie koniec.

 

Jeżeli robiliście całą powyższą procedurę na pliku dodatku, to każdy kto dołączy sobie waszego addina do swojego Excela, będzie widział pasek z waszymi narzędziami i będzie mógł je uruchamiać klikając w przyciski.

 

Jak zawsze jeżeli macie jakieś pytania/sugestie to piszcie :)

Powrót do:
Blog VBA | Podstawy VBA |


Zobacz też: