piątek, 27 lutego 2015

Debugowanie kodu- prosta sztuczka

Zdobywając coraz większą wiedzę i doświadczenie w obszarze VBA zaczynamy tworzyć coraz bardziej rozbudwoane linie kodu. Szczególnie referencje do złożonych obiektów przestają być problematyczne dzięki coraz lepszemu rozumieniu hierarchii obiektów i samych obiektów i kolekcji. W pewnych sytuacjach zdarzyć się może, że określona linia kodu będzie mieć następującą schematyczną postać:
1Dim myObject as Object
2Set myObject = Object.Object.Object.Object.Object
lub w konkretnym przykładzie:
1Dim Komentarz As Object
2Set Komentarz = ActiveCell.Comment.Shape.TextFrame2.TextRange
Jeżeli nasza referencja jest błędna zwrócony zostanie błąd 445: `Object doesn’t support this action`. Pytanie jednak- której ‘akcji’? jeżeli wszystko wydaje się być poprawne czasem trudno o szybkie odnalezienie błędu. Najprostszym rozwiązaniem jest więc rozbicie poszczególnych elementów składowych naszego kodu na kolejne zmienne. W tym wariancie błąd zostanie zwrócony w linii ze wskazaniem konkretnej właściwości/obiektu, który jest błędny. Poniżej dwa przykłady takiego ‘sprytnego debugowania’- wariant krótki bez deklaracji konkretnego oczekiwanego typu obiektu oraz wariant rozbudowany definiujący konkretne typy obiektów (zalecany).
01Sub SprytneDebugowanie()
02 
03    Dim Komentarz As Object
04    Set Komentarz = ActiveCell.Comment.Shape.TextFrame2.TextRange
05     
06    'wariant szybki
07    Dim A, B, C, D 'tu As Variant, opcjonalnie As Object
08    Set A = ActiveCell.Comment
09    Set B = A.Shape
10    Set C = B.TextFrame2
11    Set D = C.TextRange
12     
13End Sub
14 
15Sub SprytneDebugowanie2()
16     
17    Dim Komentarz As Object
18    Set Komentarz = ActiveCell.Comment.Shape.TextFrame2.TextRange
19 
20    'wariant dokładny
21    Dim A As Comment
22    Dim B As Shape
23    Dim C As TextFrame2
24    Dim D As TextRange2
25    Set A = ActiveCell.Comment
26    Set B = A.Shape
27    Set C = B.TextFrame2
28    Set D = C.TextRange
29         
30End Sub

Brak komentarzy:

Prześlij komentarz