Własne makro w Office

Wszystkie aplikacje wchodzące w skład MS Office mają szeroki wybór wbudowanych poleceń, dostępnych przez przyciski pasków narzędzi, skróty klawiaturowe czy główne menu. Po pewnym okresie używania np. Worda, zaczyna się odnosić wrażenie, że pewne jego funkcje mogłyby działać nieco inaczej. Jeśli i Ty dotarłeś do tego momentu, oto rozwiązanie: napisz sobie makro. 

Pracując z jakimkolwiek programem biurowym często korzystamy z tych samych poleceń, co więcej, polecenia te są z reguły wydawane przez nas w pewnym określonym porządku. Chociażby zmiana stylu czcionki bieżącego akapitu wymaga zaznaczenia tekstu, który się w nim znajduje (potrójne kliknięcie myszą w dowolnym miejscu akapitu), wciśnięcia (przykładowo) na pasku narzędzi przycisku „Kursywa” i, powiedzmy, „Podkreślenie”. Gdybyśmy chcieli dodatkowo zmienić rozmiar czcionki, to musimy jeszcze skorzystać z odpowiedniego pola wyboru, co daje łącznie siedem kliknięć. Teraz wyobraźmy sobie, że tę czynność powtarzamy z wybranymi z tekstu tylko sześcioma akapitami – „zaklikamy się na śmierć”. 

JEST NA TO SPOSÓB:

Już dawno temu w stwierdzono, że takie powtarzające się czynności można by gdzieś zapamiętać, a później w razie potrzeby z nich korzystać. W ten sposób powstały makropolecenia (w skrócie zwane makrami). Pierwsze programy wyposażone w obsługę makr oferowały po prostu rejestrowanie makropoleceń jako wprowadzanych z interfejsu użytkownika komend, np. po wybraniu pewnego makra „symulowały” wciskanie klawiszy w takiej kolejności, w jakiej zostały dla niego zdefiniowane. Lecz powstały w ten sposób zapis był praktycznie niezrozumiały, konieczne okazało się stworzenie języka makr „przyjaznego” dla użytkownika i jednocześnie niezależnego od interfejsu aplikacji. 
Firma Microsoft zdecydowała się na wykorzystanie stosunkowo łatwego, opracowanego specjalnie dla początkujących języka programowania: Basica. Jego zaadaptowana na potrzeby MS Office wersja nosi nazwę Visual Basic for Applications (VBA). Lecz nie zniechęcajmy się, gdyż nie będziemy tu poznawać tajników Visual Basica: MS Office (zarówno wersja 97, jak i 2000) został wyposażony w rejestrator makr, który samoczynnie tłumaczy wykonywane podczas zapisu makra operacje na instrukcje języka VBA. Garść uzupełniających informacji zawartych w tym artykule ma zdopingować do większego zainteresowania się programowaniem makr i szerszego wykorzystania drzemiących w VBA możliwości (a są one przeogromne). Na początek jednak wystarczy zwykłe poprawianie funkcjonalności zarejestrowanych makropoleceń. 

PRZYGOTOWANIA:

Pracę zaczniemy od drobnego usprawnienia: dodamy pasek narzędzi Visual Basic, przyspieszając dostęp do przycisków kontrolujących zapisywanie i uruchamianie makr. Wybieramy z głównego menu aplikacji (dotyczy zarówno Worda, jak i Excela) polecenie „Narzędzia”, następnie „Dostosuj...” i zaznaczamy opcję „Visual Basic”. Aby nowo wyświetlony pasek narzędzi nie zasłaniał widoku edytowanego dokumentu (arkusza), przeciągnijmy go na wolne miejsce poniżej menu. 
Istnieje pewna praktyczna zasada dotycząca rejestrowania makropoleceń: wykonaj „na sucho” (bez zapisu) wszystkie polecenia, jakie masz zamiar włączyć do makra i dopiero gdy taki „test” zakończy się powodzeniem uruchom rejestrator (klikając ikonkę „Zarejestruj makro”). Wykonaj jeszcze raz te same czynności i zakończ działanie rejestratora. 
Teraz możemy zająć się zarejestrowaniem pierwszego makra. 

AUTOMATYCZNY WYKRES (EXCEL)

Nie bez powodu jednym z najczęstszych zastosowań Excela jest tworzenie wykresów. To one powodują, że arkusze są atrakcyjniejsze i przekazują więcej użytecznych informacji. W tym przykładzie zakładamy, że dane przeznaczone do wizualizacji umieszczone są w pierwszej kolumnie aktywnego arkusza. W takim przypadku wykonujemy następujące czynności: 
1. Zaznaczamy komórkę A1.
2. Klikamy przycisk „Zarejestruj makro”, jako nazwę podajemy np. „Wykres1”.
3. Klikamy przycisk „Kreator wykresów”, następnie „Zakończ” – utworzony zostanie standardowy wykres. 
4. Klikamy przycisk „Zatrzymaj rejestrowanie”.

Usuwamy powstały wykres i przechodzimy do edycji makra przyciskiem
„Edytor Visual Basic”. Makro znajdujemy w okienku „Projekt” w folderze „Moduły” (strzałka) „Moduł1”, i widzimy jego kod (wraz z komentarzem po znaku apostrofu): 
A co, jeśli teraz będziemy potrzebowali wykresu powstałego z danych z innej niż pierwsza kolumny? Albo zechcemy dodać kilka kolumn? Zabieramy się za poprawienie zapisanego makra, któremu dodamy okno dialogowe monitujące o wprowadzenie zakresu danych. Zakres należy wprowadzić w formie adresu lewej górnej komórki z danymi i prawej dolnej, rozdzielone dwukropkiem (np. A3:D7). Do kodu makra dodajemy (przed poleceniem Charts.Add): 
Dim myRange As String
myRange = InputBox
(„Wprowadź zakres danych (LG:PD):”)

oraz zmieniamy linię zawierającą .Range(„A1:A7”) na
ActiveChart.SetSourceData Source:=Sheets(„Arkusz1”).Range(myRange)

Tak zmienione makro nie będzie jednak „idiotoodporne”, tzn. jeśli wprowadzimy niepoprawne wyrażenie np. „słoń” zamiast „A1:C3”, to makro przerwie działanie. Zabezpieczanie kodu przed takimi błędami lub złośliwością użytkownika to jednak temat na oddzielny artykuł. Dla naszych potrzeb jest ono zupełnie wystarczające. 

PRZYKŁAD:

Sub Wykres1() 
'utwórz nowy wykres 
Charts.Add 
'wybierz typ: kolumnowy grupowany 
ActiveChart.ChartType = xlColumnClustered 
'ustaw zakres danych od A1 do A7 
ActiveChart.SetSourceData Source:=Sheets("Arkusz1").Range("A1:A7") 
'gdzie zostanie wyświetlony wykres 
ActiveChart.Location Where:=xlLocationAsObject, Name:="Arkusz1" 
End Sub


FORMUŁA = WARTOŚĆ (EXCEL):

Jest to bardzo przydatne makro, jeśli np. zachodzi konieczność posortowania wyników obliczonych przez wpisane w dane komórki formuły. 
1. Zaznaczamy dowolną komórkę (komórki), którą chcemy „zamrozić”.
2. Wciskamy przycisk „Zarejestruj makro”. Najlepiej przypisać mu łatwy do zapamiętania skrót klawiaturowy, np. Ctrl + w. 
3. Wciskamy przycisk „Kopiuj”.
4. Z menu „Edycja” wybieramy „Wklej specjalnie...”.
5. W grupie „Wklej” zaznaczamy opcję „Wartości” i potwierdzamy „OK”.
6. Zatrzymujemy rejestrator makr.

MIŁE ZŁEGO POCZĄTKI (WORD):

Bardzo prostą, lecz przydatną demonstracją makropolecenia napisanego w Visual Basicu jest automatyczne otwieranie dokumentu, z którym ostatnio pracowaliśmy. Otóż istnieje pięć kategorii makr wykonywanych w różnych momentach pracy z Wordem – zostały one zestawione i krótko scharakteryzowane w tabelce „Automakropolecenia”. Nas interesuje makro o nazwie AutoExec, wykonywane podczas każdego uruchomienia Worda. Po uruchomieniu przyciskiem Edytora Visual Basica w oknie „Projekt – Normal”, klikamy podwójnie w folder „Moduły”. Rozwinie się wtedy lista istniejących modułów, tu znowu podwójnym kliknięciem otwieramy „NewMacros”, a w okienku, które wyskoczy po prawej stronie edytora wpisujemy: 

Sub AutoExec()
RecentFiles(1).Open
End Sub

Pamiętajmy o zapisaniu tego makra w domyślnym szablonie „Normal”. Od tego momentu, za każdym uruchomieniem Worda, przywita nas on już otwartym dokumentem, nad którym poprzednio pracowaliśmy. Dlaczego „Miłe złego początki”? Pamiętajmy, że automatycznie wykonywane makra są, niestety, wykorzystywane przez osoby piszące makrowirusy. 

DWIE STRONY NARAZ (WORD):

99 proc. dokumentów drukowanych jest na najpopularniejszym w tej chwili formacie papieru A4, który ma jedną poważną wadę: w wielu sytuacjach jest nieporęczny i czytanie takiego wydruku (szczególnie na luźnych kartkach) bywa kłopotliwe, na dodatek kilka oddzielnych dokumentów w tym formacie potrafi zająć całe biurko. Wyjściem z tej sytuacji byłoby ustalenie rozmiaru papieru na A5, lecz wtedy część kartki byłaby nie zadrukowana. Poniższe makro rozwiązuje ten problem w inny sposób: ustala orientację papieru na poziomą (ang. landscape), tworzy z aktualnego dokumentu dwie kolumny tekstu, modyfikuje też wartość górnego marginesu. Następnie wydaje polecenie drukowania i na koniec odwraca wszystkie zmiany, wracając do oryginalnej postaci dokumentu.

PRZYKŁAD:

Sub Drukuj2Strony() 
With ActiveDocument.PageSetup 
'zmień ułożenie strony na poziome 
.Orientation = wdOrientLandscape 
'utwórz z całego tekstu dwie kolumny 
.TextColumns.SetCount NumColumns:=2 
'ustaw górny margines na 2 cm 
.TopMargin = CentimetersToPoints(2) 
End With 
'drukuj dokument 
ActiveDocument.PrintOut 
'odwróć wprowadzone zmiany 
With ActiveDocument.PageSetup 
.Orientation = wdOrientPortrait 
.TextColumns.SetCount NumColumns:=1 
End With 
End Sub

Pragnących poszerzyć swoją wiedzę na temat VBA zachęcam do przeanalizowania przykładów zawartych w pomocy MS Office oraz przykładowych plikach dołączonych do pakietu (znaleźć je można w folderze „Program Files\Microsoft Office\Office\Makra”). 

AUTOMAKROPOLECENIA:

AutoExec – to makro już znamy. Wykonuje się ono w trakcie uruchamiania aplikacji. Można w razie potrzeby pominąć to makro, jeżeli przy uruchamianiu programu wciśniemy klawisz „Shift”. 
AutoExit – makro to wykona się podczas kończenia pracy, podczas zamykania aplikacji. 
AutoOpen – to makro zostanie uruchomione przy każdym otwarciu dokumentu, w którym się ono znajduje. 
AutoClose – jak wyżej, tylko podczas zamykania dokumentu. 
AutoNew – wykonuje się podczas tworzenia dokumentu opartego na danym szablonie – w każdym szablonie może być inne makro. 

<DF>
frankosio@wp.pl
http://strony.wp.pl/wp/franko

 

  Copyright 2001 at-online. Wszelkie prawa zastrzeżone.