Start > Kursy on-line > Excel - makra i VBA

Excel - makra i VBA


Obiekt Application

Załącznik z przykładami dla tego rozdziału znajduje się w tym miejscu.

W ostatnim rozdziale tej części kursu, omówimy najważniejsze elementy związane z obiektem nazwanym Application. Właściwości oraz metody odnoszące się do tego obiektu mają odzwierciedlenie w sposobie działania całej aplikacji MS Excel. Elementy, o których należy wspomnieć to:

  • Application.ScreenUpdating - który przyjmuje wartość "True" lub "False". Ustawiając właściwość Application.ScreenUpdating=False, wyłączamy zupełnie odświeżanie ekranu. Przydatna funkcjonalność w sytuacji, kiedy z określonego powodu musimy przełączać się pomiędzy oknami lub arkuszami pliku Excel, natomiast niekoniecznie chcemy oglądać "migający ekran" i wszelkie inne zmiany zachodzące w trakcie działania programu. Aby przywrócić normalne działanie, ustawiamy właściwość na "True".
  • Application.Calculation - kolejna ciekawa właściwość tego obiektu, pozwalająca na wyłączenie automatycznego obliczania (kiedy równa się "xlCalculationManual") lub ponowne jego włączenie ("xlCalculationAutomatic"). Dodatkowo jeśli przeliczanie jest wyłączone, a w trakcie działania programu potrzebujemy go jednokrotnie użyć, możemy zastosować metodę Application.Calculate (dla całego skoroszytu) lub Application.ActiveSheet.Calculate dla przeliczenia aktualnego arkusza, bez włączania automatycznego przeliczania całości.
  • Application.GetOpenFilename - jest to metoda, powodująca otwarcie okna dialogowego typu "Otwórz plik". Po niej, w nawiasie możemy podać odpowiedni komunikat oraz zdefiniować filtr tego okna, np.: ("Pliki Excel (*.xls), *.xls") - dla wyświetlenia tylko plików Excel. Metoda zwraca pełną ścieżkę do pliku, który wybierze użytkownik.
  • Application.Intersect - potrafi wskazać obszar będący częścią wspólną wielu innych zakresów.



Z racji bardzo ciekawej właściwości i możliwości sterowania zachowaniem się arkusza podczas działania aplikacji, zatrzymamy się dłużej na ostatniej metodzie.
Założmy, że chcemy stworzyć prostą procedurę, która o ile będziemy wpisywać tekst w komórkę z określonego zakresu arkusza, będzie za każdym razem nas o tym informować wyskakującym komunikatem, natomiast dokonanie jakichkolwiek zmian w innym obszarze, odbędzie się bez komunikatu. Załącznik z gotową procedurą można pobrać na początku tego rozdziału, my jednak stworzymy go od początku. Otwórzmy nowy plik i w arkuszu "Arkusz1" zaznaczmy zakres C5:G17 i oznaczmy go kolorem żółtym oraz nazwijmy "obszar":




Następnie przejdźmy do kodu umieszczonego w tym arkuszu i stwórzmy procedurę:


Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Me.Range("obszar")) Is Nothing Then
               
	MsgBox "Wpisano: " & Cells(Target.Cells.Row, Target.Cells.Column)

End If

End Sub
Procedura nazwana jest Worksheet_Change i oznacza, że będzie uruchamiała się podczas zmian wprowadzonych do arkusza - zmianami mogą być jak najbardziej wpisy tekstów do komórek. Argumentem tej procedury jest zmienna "Target" typu Range, która będzie nas informować, w jakim obszarze (komórce) zaszły zmiany.
Kolejny wiersz to dosyć skomplikowana konstrukcja logiczna, wykorzystująca metodę Application.Intersect, która porównuje zmienną "Target" oraz zakres arkusza nazwany "obszar". Jeśli porównanie tych zakresów nie jest niczym (If Not". Is Nothing), to procedura informuje nas o wpisie w danej komórce odpowiednim komunikatem. Jeśli warunek nie jest spełniony, następuje koniec procedury. Pobierając załącznik do tej części kursu, czytelnik może z łatwością wypróbować działanie kodu oraz dokonać łatwej jego modyfikacji.