Jednym z narzędzi w edytorze VBA, służącym do debugowania kodu, jest okno Watches. Dzięki niemu możemy monitorować nie tylko wartości zmiennych (publicznych), ale też konkretne instrukcje czy obiekty. W tej notce napiszę jak zautomatyzować pracę w tym okienku.
Watches vs. Locals
Sporo osób twierdzi, że okno Watches to uboższa wersja okna Locals. Co ciekawe – sympatycy Watches uważają dokładnie odwrotnie.
Gdzie leży prawda? Moim zdaniem oba narzędzia świetnie się uzupełniają Locals jest dużo wygodniejsze, ale to Watches daje większe możliwości.
W przypadku Locals wszystko odbywa się automatycznie. Korzystając z Watches sami musimy określić zmienne i obiekty, które chcemy monitorować. Gra jest jednak warta świeczki…
Okno Watches
Za pomocą okienka Watches możemy kontrolować nie tylko wartość zmiennych (w tym publicznych), ale też konkretne wyrażenia czy właściwości obiektów, czy nawet całe obiekty!
Pewien problem dotyczy tego, że przy każdym uruchomieniu pliku – nasze ustawienia się resetują i musimy każdą czujkę zdefiniować od nowa.
Możemy jednak znacznie uprościć sobie pracę korzystając z makra, która doda nasze wyrażenia automatycznie do okienka Watches.
Wydawało mi się to niemożliwe, ale za pomocą kodu opracowanego przez mojego kolegę z Excelforum – Artika, jesteśmy w stanie to zrobić.
Kod makra
Kluczem jest w tym przypadku wykorzystanie metody SendKeys obiektu Application.
Makro główne
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub AddWatch() SendKeys "%vh" Call Send("Application.Screenupdating") Call Send("Application.EnableEvents") Call Send("Application.Calculation") Call Send("ActiveWorkbook.Name") Call Send("ActiveSheet.Name") Call Send("ActiveSheet.AutoFilterMode") Call Send("ActiveCell.Address") Call Send("ActiveCell.Value") End Sub |
Podprocedura wywołująca
1 2 3 4 5 |
Sub Send(strT) SendKeys "%da" & strT & "{Tab 2}{Up 200}~" End Sub |