poniedziałek, 24 lutego 2014

Kompilacja warunkowa #If...#End If

Tworząc określoną rozbudowaną aplikację w VBA naszym celem może być stworzenie jej w taki sposób, aby zależnie od zdefiniowanych parametrów jej przebieg był odmienny. Możliwe przykłady takich działań:

a) wersja testowa i ostateczna
b) wersja uruchamiana przez administratora i pozostałych użytkowników
c) wersja dla nowszych i starszych wersji aplikacji MS Excel/MS Office

W w/w i podobnych sytuacjach zasadne może się okazać wykorzystanie narzędzia kompilacji warunkowej.

Pierwszym krokiem będzie wskazanie elementów, parametrów kompilacji.
W tym celu w edytorze VBA należy uruchomić poniższe okno znajdujące się w Menu >> Tools >> VBAProject Properties... >> zakładka General. Następnie w ostatniej pozycji tego okna, "Conditional Compilation Arguments:", należy zdefiniować wszystkie niezbędne zmienne/warunki rozdzielając je symbolem dwukropka. Co ważne- nasze zmienne warunkowe mogą przyjmować tylko wartości liczbowe, tekst nie jest dopuszczalny.



Kolejny krok to umiejętne wykorzystanie stworzonych zmiennych warunkowych w naszym kodzie.
Kluczowe w tym momencie będzie wykorzystanie znaku # (sharp/hash), który musi wystąpić przed każdą linią instrukcji warunkowej #If...#ElseIf...#Else...#End If.

Przykład A) Zmienna warunkowa compVersion ma za zadanie wskazywać ten fragment kodu, który zostanie wykonany zależnie od zadeklarowanej wersji aplikacji.
1#If compVersion = 2007 Then
2       'dla parametrów z powyższego okna _
3        wykonana zostanie poniższa linia
4    MsgBox "To wersja dla Excel 2007 i wyższa"
5#Else
6    MsgBox "To wersja dla wcześniejszych aplikacji"
7#End If

Przykład B) W przypadku kompilacji wykonywanej przez administratora należy w powyższym oknie ustawić wartość compAdmin =1, kompilacja warunkowa przypisze zmiennej Pass hasło na hasło administratora, w innym wariancie poprosi użytkownika o podanie hasła
1Dim Pass As String
2#If compAdmin = 1 Then
3    Pass = "hasło_administratora"
4#Else
5       'dla parametrów z powyższego okna _
6        wykonana zostanie poniższa linia
7    Pass = InputBox("Podaj hasło: ")
8#End If

Przykład C) niepoprawny. Proszę zwrócić uwagę, że poniższy kod nie jest poprawny ze względu na brak symboli # na początku każdej linii instrukcji warunkowej. Przy próbie wywołania poniższego kodu uzyskamy informację o braku zadeklarowanej zmiennej compUser. Samo zdefiniowanie tej zmiennej w pierwszym kroku nie jest więc wystarczające.
1If compUser = 1 Then
2    MsgBox "Wariant dla 1 Grupy użytkowników."
3Else
4    MsgBox "Wariant dla pozostałych użytkowników. "
5End If

Wskazówka! Stałe, parametry kompilacji można również zdefiniować wewnątrz kodu VBA zamiast w oknie VBAProject Properties zaprezentowanym w pierwszym kroku powyżej. W tym celu również niezbędne będzie wykorzystanie znaku # w celu utworzenia np. takiego fragmentu kodu:
1#Const compStala = 1
2#If compStala = 1 Then
3    MsgBox "OK"
4#Else
5    MsgBox "False"
6#End If

Brak komentarzy:

Prześlij komentarz