Moje doświadczenia z Excelem, Accesem i programowaniem w VBA

Wpisy z tagiem: obiekt Application

wtorek, 21 lutego 2017

Wyobraźmy sobie arkusz Excela z kodem reagującym na zdarzenia arkusza. W zależności od tego, jaki jest to kod, jego wykonywanie bardzo łatwo może generować kolejne i zupełnie niepotrzebne zdarzenia arkusza.
Załóżmy, że mamy oprogramowane zdarzenie arkusza, które po zmianie wartości w komórce kolumny A w sąsiadującej z nią komórce kolumny B wstawia datę. Przykładowy kod takiej funkcji wygląda tak:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
        Target.Offset(0, 1) = Date()
    End If
End Sub


 

 

 

W trakcie wykonywania kodu, po wstawieniu wartości w kolumnie B następuje wykrycie zdarzenia "przy zmianie" i następuje ponowne uruchomienie makra (mimo, że pierwsze nie doszło jeszcze do końca). W tym przypadku akurat może być praktycznie niezauważalne, ale jeżeli takich zmian jest więcej - owszem. W ekstremalnym przypadku może to doprowadzić do zapętlenia kodu.

Chcąc tego uniknąć musimy na czas wykonywania kodu po prostu wyłączyć obsługę wykrywania zdarzeń. Wykorzystujemy do tego właściwość obiektu Application - EnableEvants. Jest to właściwość typu Boolean czyli może przybierać wartość Prawda lub Fałsz. Ustawiamy ją tak:

Application.EnableEvents=False          'wyłączenie obsługi zdarzeń

Application.EnableEvents=True            'włączenie obsługi zdarzeń

Wykorzystując w kodzie makra jw. mamy więc:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 Then
   Application.EnableEvents = False
   Target.Offset(0, 1) = Date()
   Application.EnableEvents = True
 End If

End Sub


 

 

 

 

 

I już. Na czas wykonywania kodu obsługa zdarzeń jest wyłączona - wstawienie daty w komórce sąsiadującej nie wywoła w tym przypadku ponownej reakcji na zdarzenie.



niedziela, 23 sierpnia 2015

W trakcie pracy w Excelu zdarza się, że na ekranie pojawiają się komunikaty ostrzegawcze. Najczęściej dotyczą one np.nieodwracalności usunięcia danych, łączy itp. Dobrze, że są, gdyż stanowią ochronę przed przypadkowym skasowaniem ważnych elementów aplikacji. Gorzej jednak, gdy komunikaty te pojawiają się w trakcie wykonywania kodu VBA - takie potwierdzanie nie tylko wydłuża czas wykonywania makra, ale dodatkowo jeszcze sprawia, że obsługa staje się uciążliwa.
Takie systemowe komunikaty można wyłączyć na czas wykonywania kodu poprzez wykorzystanie właściwości obiektu Application - DisplayAlerts:

Obiekt Application

Ustawienie właściwości Application.DisplayAlerts na False powoduje wyłączenie komunikatów systemowych. Po wykonaniu ciągu instrukcji, włączamy je ponownie korzystając z tej samej właściwości ustawionej na True.

Sub MojaProcedura()

Application.DisplayAlerts = False

(...)

Ciąg instrukcji

(...)

Application.Display =True

End Sub

 


 

 

Excel 2013 i programowanie VBA

 


poniedziałek, 17 sierpnia 2015

Często zdarza się, że w trakcie wykonywania makra czy procedury zapisanej w kodzie VBA, "miga" ekran. Wygląda to mało ciekawie - ciąg instrukcji powinien się wykonywać raczej w tle, bez odświeżania (a tym samym - migania) ekranu po każdym wykonanym kroku.
Można to osiągnąć poprzez wykorzystanie właściwości obiektu Application - ScreenUpdating:

 Obiekt Application

Ustawienie właściwości na False powoduje wyłączenie odświeżania ekranu - zostaje on "zamrożony". Po wykonaniu ciągu instrukcji odświeżamy ekran korzystając z tej samej właściwości ustawionej na True.

Sub MojaProcedura()

Application.ScreenUpdating = False

(...)

Ciąg instrukcji

(...)

Application.ScreenUpdating =True

End Sub

 


 


 

Kurs Excel programowanie w VBA

| < Listopad 2017 > |
Pn Wt Śr Cz Pt So N
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      


Książki warte polecenia
zobacz szczegóły...


A tu oferta na dziś:





ministat liczniki.org



Napisz do mnie!