Wojciech Gardziński, Krzysztof Rumiński
W dzisiejszym odcinku, już jako nieco doświadczeni
programiści VBA, zajmiemy się publikacją naszych programów i funkcji.
{publikacja programu} Naszym celem dzisiaj, będzie stworzenie programu i umożliwienie używania go przez naszych kolegów z biura.
Wykorzystajmy kod, który powstał podczas lektury poprzedniego odcinka kursu. Przypomnijmy go (W arkuszu Excela naciskamy [Alt+F11], następnie wybieramy z menu Edytora VBA: Insert / Module). W oknie modułu mamy już lub wpisujemy od nowa:
Sub Makro1()
With Selection.Font
.FontStyle = "Pogrubiony"
.Strikethrough = True
End
With
End Sub
Sub MojePierwszeNapisaneMakro()
MsgBox ("Witaj Świecie!")
End Sub
Function Kwadrat(Liczba As Double) As Double
Kwadrat = Liczba * Liczba
End Function
Function KorektaBłędu(Arg As Variant, Optional TekstBłędu As String) As Variant
If IsError(Arg) Then
KorektaBłędu = TekstBłędu
Else
KorektaBłędu = Arg
End
If
End Function
Sprawdźmy jeszcze raz działanie naszych procedur i funkcji i, gdy działają (Funkcje wpisujemy z Kreatora funkcji – grupa funkcji Użytkownika, procedury uruchamiamy przez [Alt+F8]), przejdźmy dalej.
W chwili obecnej, nasz program (kod w module VBA) jest podpięty pod arkusz Excela. Gdy arkusz zamkniemy (pamiętajmy o zachowaniu go, pomimo tego, że arkusz jest czysty, np. w pliku KursGP-VBA3.xls), Excel funkcji widzieć już nie będzie. Co i jak zrobić, żeby one jednak cały czas były dostępne w naszym Excelu? Można to zrobić na kilka sposobów:
1. Gdy uruchamiamy Excela, zawsze otwieramy plik KursGP-VBA3.xls.
2. Uruchamiamy Excela, otwierając nie samego Excela, tylko plik KursGP-VBA3.xls, umieszczony na pulpicie - Excel otwiera się wtedy automatycznie.
3. Umieszczamy plik KursGP-VBA3.xls w katalogu C:\Documents and Settings\WojciechG\Dane aplikacji\Microsoft\Excel\XLSTART (oczywiście ścieżka jest u Państwa nieco inna, zależna od nazwy Użytkownika) lub w dowolnym innym katalogu plików startowych Excela – można go określić poprzez Narzędzia / Opcje / karta: Ogólne / określić: Inne położenie plików startowych. Wtedy Excel, uruchamiając się, otwiera wszystkie skoroszyty tam umieszczone, więc i nasz. Gdy nasze makra nagramy (jest taka opcja na początku Rejestratora makr) do pliku Personal.xls, Excel sam umieści go w domyślnym katalogu plików startowych …XLStart.
4. Tworzymy tzw. Dodatek Excela (ang. Add-In) poprzez zapis naszego skoroszytu jako typ pliku Dodatek Microsoft Excel (*.xla). Excel wtedy sam zapisuje go do specjalnie w tym celu wydzielonego katalogu AddIns (C:\Documents and Settings\WojciechG\Dane aplikacji\Microsoft\AddIns)
Gdy dodatek jest utworzony, możemy go zarejestrować, jako aktywny (tj. wgrywany przy starcie Excela) dodatek poprzez: Narzędzia / Dodatki / opcja: Przeglądaj / wskazujemy: Kursgp-vba3 i potwierdzamy.
Rys.1. Rejestrowanie naszego dodatku w Oknie Dodatki.
Dodatek zarejestrowany, jego funkcje i procedury, dostępne są wtedy z poziomu arkusza (tj. w kreatorze funkcji) BEZ nazwy skoroszytu, zawierającego daną funkcję lub procedurę. To ważne, bo oznacza, że nasza funkcja dostępna jest zawsze, we wszystkich arkuszach w naszym Excelu.
5. Tworzymy dodatek jak wyżej, ale kopiujemy go z katalogu AddIns, wklejamy gdziekolwiek, np. na pulpit i stamtąd uruchamiamy, jak normalny plik Excela. Można go jednak skopiować też do katalogu …\XLStart i wtedy uruchamia się sam, przy starcie Excela.
Jak widać, istnieje duża ilość możliwości publikacji naszego programu, ponieważ można to zrobić na każdym komputerze, tzn. np. wgrać koledze do katalogu XLStart lub do katalogu AddIns i zarejestrować jak wyżej.
{alternatywne sposoby
uruchamiania makr}
Ważnym aspektem programowania i udostępniania programów innym użytkownikom, jest określenie sposobu, ale też ułatwienie, uruchamiania tych makr. Nie wszyscy chcą uruchamiać nasze makra poprzez Narzędzia / Makro / Makra (lub [Alt+F8]) itp., szczególnie, że w przypadku procedur (nie dotyczy funkcji), zapisanych w dodatkach, NIE SĄ one widoczne w oknie Makra i nie można ich stamtąd bezpośrednio uruchomić. Jak więc ułatwić uruchamianie naszych procedur przez innych użytkowników? Sposobów jest znowu kilka:
Z menu Wstaw / Rysunek / Z pliku… wybieramy dowolny plik graficzny i wstawiamy go do arkusza. Następnie klikamy na nim prawym przyciskiem myszy i wybieramy Przypisz makro – wskazujemy nasze makro.
Rys. 3. Podpinanie makra pod obiekt w arkuszu
Tworzymy własny pasek narzędzi: Narzędzia / Dostosuj / karta: Paski narzędzi / opcja: Nowy (tu nadajemy nazwę), tworzymy własną ikonkę paska narzędzi: Narzędzia / Dostosuj / karta: Polecenia / pozycja: makra (tu przeciągamy ikonkę - uśmiechniętą buźkę z pola Polecenia na nasz pasek narzędzi). Kolejny krok jest podobny do opisanego powyżej – pod prawym przyciskiem myszy na nowym narzędziu, znajduje się opcja Przypisz makro, itd. Dopiero po tym kroku zamykamy okno Dostosuj i umieszczamy pasek w żądanym miejscu
To zadanie najłatwiejsze. Zmieniamy po prostu nazwę makra MojePierwszeNapisaneMakro na Auto_Open i skoroszyt, otwierany, wyświetlać nam będzie komunikat „Witaj Świecie!”
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
‘ tu wpisujemy nasz program
End Sub
Jeżeli natomiast chcemy, aby dwukrotne kliknięcie gdziekolwiek uruchamiało nam procedurę, powinniśmy makro, obsługujące zdarzenie „dwuklik” umieścić np. w Dodatku Excela (opisane powyżej).
{okno Edytora VBA} Przyjrzyjmy się teraz oknu Edytora VBA
Rys. 4. Okno Edytora VBA
Po lewej, u góry, okno Project – VBAProject. Okno to służy do strukturalizacji naszych projektów-programów (modułów) – może ich być bowiem wiele, poza tym możemy tworzyć formularze, klasy, importować i eksportować nasze programy (wszystko pod prawym przyciskiem myszy – ale to już wyższy poziom wtajemniczenia). W jednym module może być wiele procedur i funkcji.
Po lewej, na dole, okno właściwości Properties – przydatne, tu np. zmieniamy nazwę naszego modułu, ale też ustawiamy właściwości wszystkich obiektów, jakie znajdują się lub znajdować się będą w naszych programach.
Po prawej wreszcie, okno procedur (tu jest nasz program). Na zielono, z apostrofem na początku – komentarze, nie wpływają na działanie programu.
Klauzula Sub oznacza początek, End Sub koniec procedury.
Przyjemnego i
efektywnego programowania!