Wstawianie formantu formularza „Przycisk" i analiza (modyfikowanie) zarejestrowanego makra
Utwórz makro wstawiające przycisk do komórki B21-B22. Przyciskowi przypisz makro Sortuj rosnąco.
1. Włącz rejestrowanie makra. Rejestrowane makro nazwij Definiuj_przycisk_FF.
2. Wstaw przycisk z Zakładki Deleloper do komórki B21-B22 i w oknie dialogowym, które ujrzysz, przypisz do niego makro Sortuj_rosnąco.
3. Na przycisku wpisz słowo „Sortuj rosnąco”. Jeżeli napis nie jest dobrze widoczny, wywołaj polecenie Formatuj formant, dostępne podręcznym (wyświetlanym po kliknięciu formantu Prawym przyciskiem myszy, i dokonaj niezbędnych modyfikacji.
4. Zatrzymaj rejestrowanie makra.
Analiza (i modyfikowanie) zarejestrowanego makra (zmodyfikuj makro Definiuj_przycisk_FF tak, aby uruchamiane były na przemian makra Sortuj_rosnąco i Sortuj_malejąco, a użytkownik był informowany o bieżącym sposobie sortowania tabeli).
1. Naciśnij Alt+F11, aby uruchomić edytor VBA.
2. W eksploratorze projektu wybierz swój projekt i dwukrotnie kliknij nazwę modułu (Module2), aby otworzyć jego kod.
Jeżeli nie widzisz eksploratora projektu, naciśnij Ctrl+R lub wybierz polecenie (wreszcie są paski narzędzi!) View/Project Explorer.
Rysunek 1. Sub Definiuj_przycisk_FF
3. Wybierz makro Definiuj_przycisk_FF, aby przejść do jego edycji.
Kod wygenerowany przez rejestrator podczas tworzenia przycisku w komórce B21-B22 wgląda tak:
Sub Definiuj_przycisk_FF()
'
' Definiuj_przycisk_FF Makro
'
'
ActiveSheet.Buttons.Add(38.25, 285, 109.5, 28.5).Select
Selection.OnAction = "Sortuj_rosnąco"
ActiveSheet.Shapes("Button 2").Select
Selection.Characters.Text = "Sortuj rosnąco"
With Selection.Characters(Start:=1, Length:=15).Font
.Name = "Czcionka tekstu podstawowego"
.FontStyle = "Standardowy"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = 2
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Range("B5").Select
End Sub
Ten kod zawiera dużo zbędnych informacji, których obecność nie wpływa na jego działanie. Wynika to z tego, że rejestrator zapisuje wszystkie właściwości tworzonego obiektu. Przeanalizujmy ten listing, abyśmy mogli go później świadomie zmodyfikować.
Sub Definiuj_przycisk_FF()
Fragment ten oznacza początek makra. Wszystkie następne polecenia — aż do polecenia End Sub — zaliczone będą do jednego makra. Po poleceniu Sub podawana jest nazwa makra i (opcjonalnie) jego argumenty, umieszczone w nawiasach. Nazwa makra i argumentów nie może: - rozpoczynać się od znaku innego niż litera; - być identyczna z nazwą polecenia czy funkcji używanej przez Visual Basi; - zawierać spacji — może natomiast zawierać niektóre znaki specjalne.
'
' Definiuj_przycisk_FF Makro
'
'
To komentarze. Ich zawartość nie jest analizowana przez program. Komentarze są bardzo przydatne przy analizowaniu kodu makra. Jeżeli umieścisz je podczas pracy, za kilka miesięcy nie stracisz całego dnia, gdy będziesz chciał coś poprawić.
ActiveSheet.Buttons.Add(38.25, 285, 109.5, 28.5).Select
To polecenie wstawia przycisk do arkusza1 zaznacza go.
Selection.OnAction = "Sortuj_rosnąco"
Przypisuje zaznaczonemu obiektowi makro Sortuj_rosnąco, które będzie uruchamiane po kliknięciu myszą (OnAction).
ActiveSheet.Shapes("Button 2").Select
Po przypisaniu makra nastąpiło zamknięcie okna dialogowego. Należało ponownie zaznaczyć obiekt, aby móc edytować jego właściwości. Przy okazji dowiadujemy się, że przyciskowi została przydzielona nazwa Button 2, która będzie nam w przyszłości identyfikować obiekt bez względu na jego stan i położenie.
Selection.Characters.Text = "Sortuj rosnąco"
Wpisuje tekst … na przycisku.
With Selection.Characters(Start:=1, Length:=15).Font
.Name = "Czcionka tekstu podstawowego"
.FontStyle = "Standardowy"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = 2
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Określa właściwości czcionki.
Instrukcje zawarte w blokach między With a End With zawsze dotyczą obiektu określonego przez instrukcję With.
Range("B5").Select
Zaznacza komorkę. Po każdym sortowaniu zostanie zaznaczona komórka B5.
End Sub
Kończy makro.
4. Z całego makra interesują nas tylko poniższe trzy wiersze kodu:
Selection.OnAction = "Sortuj_rosnąco"
ActiveSheet.Shapes("Button 2").Select
Selection.Characters.Text = "Sortuj rosnąco"
5. Przeanalizujmy ten listing, abyśmy mogli go później świadomie zmodyfikować. Zastanów się, jak możesz spowodować zmianę makra?
Zmieniane przypisanie przycisku powinno być po każdym sortowaniu. Należy więc dodać odpowiednie polecenia do makr sortujących. Wystarczy wpisać słowo Definiuj_przycisk przed poleceniami End Sub makr Sortuj_rosnąco i Sortuj_malejąco.
Jeżeli napis na przycisku brzmi „Sortuj malejąco", to przypisz makro „Sortuj_malejąco". W przeciwnym razie przypisz makro „Sortuj_rosnąco"