To co pochłania ostatnio większość mojego czasu to studiowanie skoroszytów ze zmodyfikowaną wstążką.
Zmiana Podejścia
Myślę, że przychodzi taki dzień w życiu programisty VBA, w którym stwierdza, że czas jednak nauczyć się projektowania wstążki.
Przyznam szczerze, że po początkowym sceptycyzmie i uleganiu stereotypom, coraz częściej dostrzegam ogromne możliwości budowy interfejsu na bazie własnej karty. Co więcej, to co wydawało mi się nie do zaakceptowania, przestało mi przeszkadzać. Chyba się starzeję…
Zakup większego monitora sprawił, że wstążka zajmuje mi teraz mniej niż przysłowiowe „pół ekranu”, a możliwość przełączania się między kartami za pomocą scrolla, nie jest aż takim utrapieniem, jak niektórzy sugerują. Warto dodać, że podobnie jak w przypadku kontrolek menu, tak i tutaj możemy skorzystać ze skrótu klawiaturowego aby wywołać wybraną kartę.
Myślę, że styczeń będzie miesiącem, w którym na swoim blogu będę zamieszczał przede wszystkim informacje o wstążce, bo temat jest nie tylko ciekawy i złożony, ale przede wszystkim bardzo ważny.
Analiza Kodu XML
Dzisiaj chciałbym przeanalizować kod XML, który tworzy taką kartę jak na rysunku poniżej.
Plik pochodzi ze strony Rona de Bruina i można go pobrać stąd.
Skoroszyt zawiera dodatkową kartę My Tab, która z kolei zawiera pięć różnych grup przycisków. Ponieważ jest to mój pierwszy wpis poświęcony projektowaniu karty to wziąłem na tapetę dość prosty przykład – grupy zawierają proste kontrolki tj. przyciski i menu rozwijane.
Grupa 1 – Przyciski Małe
<group id="customGroup1" label="Group 1">
<button id="customButton1" label="Caption 1" size="normal" onAction="Macro1" imageMso="DirectRepliesTo" />
<button id="customButton2" label="Caption 2" size="normal" onAction="Macro2" imageMso="AccountMenu" />
<button id="customButton3" label="Caption 3" size="normal" onAction="Macro3" imageMso="RegionLayoutMenu" />
</group>
Każdy przycisk na wstążce (podobnie jak grupa i karta) powinien posiadać swój unikatowy identyfikator, po którym będzie można się do niego odwołać w kodzie.
Pierwsza grupa zawiera trzy standardowe przyciski, czyli kontrolki najbardziej popularne i proste w obsłudze.
Mają one widoczną ikonę, a także etykietę. Każdy z nich odwołuje się do innego makra i ma standardowy rozmiar.
Właściwość imageMso pozwala kontrolce przypisać ikonę dowolnego przycisku nie tylko z Excela, ale także z całego pakietu Office! Nie musimy już szukać numeru ID dla danej kontrolki – wystarczy wpisać jej nazwę. Gdzie ją znajdziemy? Można poszukać na stronach Microsoftu, można także przejść do edycji paska szybkiego dostępu. Najeżdżając na kontrolkę pokaże się jej nazwa (ta w nawiasie).
Jedną z największych zalet wstążki jest możliwość swobodnego korzystania z własnych grafik – w tym celu należy użyć właściwości image, a nie imageMso.
Grupa 2 – Przyciski Małe/Duże + Separator
<group id="customGroup2" label="Group 2">
<button id="customButton4" label="Caption 4" size="normal" onAction="Macro4" imageMso="TextAlignGallery" />
<button id="customButton5" label="Caption 5" size="normal" onAction="Macro5" imageMso="PrintPreviewClose" />
<button id="customButton6" label="Caption 6" size="normal" onAction="Macro6" imageMso="PrintPreviewShrinkOnePage" />
<separator id="MySeparator1" />
<button id="customButton7" label="Caption 7" size="large" onAction="Macro7" imageMso="ReviewPreviousComment" />
</group>
Druga grupa, podobnie jak pierwsza zawiera trzy przyciski, ale do tego jeszcze separator pionowy i czwarty większy przycisk.
W przypadku trzech przycisków analogicznie rozmiar ustawiono na normalny i przypisano im odpowiednie ikony i makra. Separator musi posiadać jedynie identyfikator, natomiast czwarty przycisk, mimo, że różni się mocno wizualnie od całej trójki, to jednak ma zmieniony tylko parametr size.
Grupa 3 – Przycisk Menu z Listą Rozwijaną
<group id="customGroup3" label="Group 3">
<menu id="MyDropdownMenu" label="My Menu" size="large" imageMso="TextAlignGallery" >
<button id="customButton8" label="Caption 8" onAction="Macro8" imageMso="TextAlignGallery" />
<button id="customButton9" label="Caption 9" onAction="Macro9" imageMso="TextAlignGallery" />
<button id="customButton10" label="Caption 10" onAction="Macro10" imageMso="TextAlignGallery" />
<button id="customButton11" label="Caption 11" onAction="Macro11" imageMso="TextAlignGallery" />
<button id="customButton12" label="Caption 12" onAction="Macro12" imageMso="TextAlignGallery" />
</menu>
</group>
Trzecia grupa zawiera jeden duży przycisk, którego kliknięcie wyświetla nam listę rozwijaną pięciu zwykłych przycisków.
Ten duży przycisk to tak naprawdę nie button, ale kontrolka menu z listą rozwijaną. Opis parametrów dla przycisków w menu nie wymaga dodatkowego wyjaśnienia ponieważ przyciski na menu nie różnią się niczym od standardowych umieszczonych bezpośrednio w grupie.
Grupa 4 – Przycisk SplitButton z Listą Rozwijaną
<group id="customGroup4" label="Group 4">
<splitButton id="mySplitButton" size="large">
<button id="customButton13" imageMso="HappyFace" label="Caption 13" supertip="This is a splitButton." onAction="Macro13"/>
<menu id="splitMenu" itemSize="large">
<!-- use itemSize = large or use normal -->
<button id="customButton14" imageMso="FormatPainter" label="Caption 14" onAction="Macro14" description="Info macro 14"/>
<button id="customButton15" imageMso="FormatPainter" label="Caption 15" onAction="Macro15" description="Info macro 15"/>
<button id="customButton16" imageMso="FormatPainter" label="Caption 16" onAction="Macro16" description="Info macro 16"/>
</menu>
</splitButton>
</group>
Czwarta grupa jest bardzo ciekawa i na pozór identyczna z grupą trzecią. Mamy także do czynienia z jednym wielkim przyciskiem, który jest tak naprawdę listą rozwijaną dla zwykłych przycisków.
Jaka jest zatem różnica między zwykłym menu a Split Buttonem? W przypadku menu kliknięcie na duży przycisk pokazywało listę przycisków, w przypadku Split buttona kliknięcie na duży przycisk uruchamia Makro13. Jest to przydatne w sytuacji gdy chcemy użytkownikowi zasugerować domyślną odpowiedź – pozostałe opcje znajdują się na liście rozwijanej.
Grupa 5 – Przycisk SplitButton z Listą Rozwijaną
<group id="customGroup5" label="Group 5">
<buttonGroup id="mybuttonGroup1">
<button id="customButton17" label="Caption 17" showLabel="false" onAction="Macro17" imageMso="ReviewPreviousComment" />
<button id="customButton18" label="Caption 18" showLabel="false" onAction="Macro18" imageMso="ReviewPreviousComment" />
<button id="customButton19" label="Caption 19" showLabel="false" onAction="Macro19" imageMso="ReviewPreviousComment" />
<button id="customButton20" label="Caption 20" showLabel="false" onAction="Macro20" imageMso="ReviewPreviousComment" />
</buttonGroup>
<buttonGroup id="mybuttonGroup2">
<button id="customButton21" label="Caption 21" showLabel="false" onAction="Macro21" imageMso="HappyFace" />
<button id="customButton22" label="Caption 22" showLabel="false" onAction="Macro22" imageMso="HappyFace" />
<button id="customButton23" label="Caption 23" showLabel="false" onAction="Macro23" imageMso="HappyFace" />
</buttonGroup><buttonGroup id="mybuttonGroup3">
<toggleButton idMso="Bold"/>
<toggleButton idMso="Italic"/>
<button idMso="VisualBasic" showLabel="false" />
</buttonGroup></group>
Ostatnia piąta grupa zawiera trzy podgrupy przycisków czyli tzw. buttonGroup.
W przypadku pierwszej grupy mamy do czynienia z czterema takimi samymi przyciskami, które co prawda mają przypisane etykiety, ale nie są one wyświetlane.
Analogiczna sytuacja jest w przypadku drugiej grupy przycisków (uśmiechnięte buźki).
Trzecia grupa zawiera z kolei przyciski wbudowane. Dwa przełączniki (pogrubienie i kursywa), a do tego jeszcze standardowy przycisk uruchamiający edytor Visual Basic (bez wyświetlonej etykiety).
Aaaaaaaaaaaaa!
Mariuszu, przekabacili Cię, skoro przekonujesz się do #%#&^%$^ wstążek! 🙁
😉
A monitorek masz taki co najmniej 22 calowy? ;> Bo z innym, to nie ma co podchodzić! ;>
Ja tam dalej wolę zdecydowanie edytowalne menu z wersji 2003 i niższych.
A weź ludziskom na kursie zaawansowanym z Excela pokazuj, jak się modyfikuje wstążki pod 2007! 🙁
Ostatnio walczyłam z tworzeniem wstążek w VBA w PowerPoincie, gdzie nie ma makr typu AutoOpen, DocumentOpen, DocumentClose. Początkowo musiał mi wystarczyć Custom UI Editor, a potem trza było rzeźbić ad-in, bo inaczej się nie da ;(
Monika, sam się trochę przekabaciłem :-).
Projektowanie wstążki przy pomocy edytora wizualnego jest bardzo proste i sprawia mi dużo więcej radości niż pisanie makra w zwykłym module dla paska narzędzi. Pozostaje się tylko cieszyć, że ten dodatek jest dostepny za darmo, bo w prosty sposób można w nim także przypisać makra do kontrolek. Z poziomu samego XML jest to dość trudne bo trzeba uważać żeby wielkość liter się zgadzała – łatwo o błąd. Custom UI Editor jest dobry bo fajnie podkreśla składnię.
Pracuję teraz na dwóch monitorach – 24 + 19. Faktycznie dla 19 wstązka zajmuje aż 19% wysokości ekranu, ale dla 24 wygląda to bardzo dobrze – w żaden sposób nie zmniejsza powierzchni roboczej, bo ta jest duża. Widocznie wstążka została zaprojektowana pod wyższą rozdzielczość :-).
Zapowiada się nieźle.
Niestety niekompatybilność to jedyna, ale najważniejsza wada (zwłaszcza w naszym kraju).
Upierając się jednak przy rozwiązaniu – jedynym słusznym (ale jak trafnie określiłeś) i darmowym rozwiązaniem jest pow dodatek. trzymam kciuki za rozwiązanie problemów z ĘĄ. Niemniej jednak o ile ktoś będzie miał okazje dobrać się do .NET to polecam. Exp dla ŚwiatExcela.
Oskar, już mi się udało zrobić polskie znaki :-). Wystarczy zmienić rozszerzenie pliku na *.zip (wcześniej odkryć rozszerzenia plików), otworzyć i wyedytować plik XML (ja go edytuję w Microsoft Visual Studio), zapisać zmiany (okienko z zapytaniem wyskakuje samo przy modyfikacji pliku). Później wystarczy usunąć rozszerzenie – z *.zip robimy *.xlsm i gotowe. Bardzo się cieszę, że udało mi się to zrobić – niby detal, ale jednak mocno rzuca się w oczy. Tutaj znalazłem pomocny link
http://www.excelforum.pl/viewtopic.php?t=14554&start=0