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ć:
lub w konkretnym przykładzie:
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).
piątek, 20 lutego 2015
Jak odnaleźć źródło danych dla wykresu?
Utworzenie wykresu z wykorzystaniem kodu VBA jest relatywnie łatwe, zawsze można wspomóc się rejestratorem makr co szczególnie dotyczy początkujących adeptów programowania. W jaki sposób odnaleźć źródło danych dla wskazanego wykresu, a więc zakres komórek, na bazie których nasz wykres rysuje linie czy kolumny? W tym zadaniu nie pomoże rejestrator makr, całą koncepcję musimy oprzeć na obiektach powiązanych z wykresem wykorzystując precyzyjnie hierarchię tych obiektów i odpowiednie właściwości.
Jako punkt odniesienia przyjmijmy następujący wykres liniowy posiadający jedną serię danych.
W rozwiązaniu, które poniżej musimy wykorzystać następujące obiekty i ich właściwości:
1. Obiekt Chart, czyli wykres, i jego właściwość:
2. Series, czyli serię danych wykresu, oraz jej właściwość
3. Formula, zwracającą formułę tworzącą referencję do zakresu danych.
Właściwy kod niezbędny do odnalezienia poszukiwanego zakresu wraz z dodatkowymi komentarzami znajduje się poniżej.
A co jeżeli chcielibyśmy odnaleźć kolejne elementy, punkty naszego wykresu i referencję do zakresu dla każdego z nich? W tym celu w miejscu oznaczonym gwiazdką w powyższym przykładzie musimy wstawić poniższy kod.
Jako punkt odniesienia przyjmijmy następujący wykres liniowy posiadający jedną serię danych.
W rozwiązaniu, które poniżej musimy wykorzystać następujące obiekty i ich właściwości:
1. Obiekt Chart, czyli wykres, i jego właściwość:
2. Series, czyli serię danych wykresu, oraz jej właściwość
3. Formula, zwracającą formułę tworzącą referencję do zakresu danych.
Właściwy kod niezbędny do odnalezienia poszukiwanego zakresu wraz z dodatkowymi komentarzami znajduje się poniżej.
A co jeżeli chcielibyśmy odnaleźć kolejne elementy, punkty naszego wykresu i referencję do zakresu dla każdego z nich? W tym celu w miejscu oznaczonym gwiazdką w powyższym przykładzie musimy wstawić poniższy kod.
piątek, 6 lutego 2015
Zaokrąglanie liczb- funkcja Round vs. UDF
W dobie operacji finansowych wykonywanych dla jednostek wyrażanych w czterech, pięciu miejscach po przecinku zaokrąglanie wyników może sprawiać pewien problem. Szczególny problem pojawia się w momencie, gdy sięgamy po standardową, wbudowaną funkcję VBA Round. Okazuje się bowiem, że funkcja ta nie zaokrągla w sposób jaki oczekujemy. Zobrazuje to poniższy przykładowy kod:
Jak widać zwracane wynik są w niektórych sytuacjach lekko zaskakujące. Teoretycznie bowiem obowiązuje tu zasada, iż w sytuacji, gdy zaokrąglana wartość wynosi 5 (jak w każdym powyższym przypadku) to zaokrąglenie w górę nastąpi o ile poprzednia liczba jest nieparzysta, oraz w dół- gdy poprzednia liczba jest parzysta. Jak widać nie w każdym przypadku jest to prawdziwe.
Jeżeli więc potrzebujemy klasycznej techniki zaokrąglania to niezbędne jest stworzenie własnej funkcji zaokrąglającej. Poniżej przykład takie funkcji:
Wyniki działania naszej funkcji zaokrąglającej prezentuje poniższy przykład:
Jeżeli więc potrzebujemy klasycznej techniki zaokrąglania to niezbędne jest stworzenie własnej funkcji zaokrąglającej. Poniżej przykład takie funkcji:
Wyniki działania naszej funkcji zaokrąglającej prezentuje poniższy przykład:
poniedziałek, 2 lutego 2015
Łączenie tekstów- ampersand (&) vs. plus (+)
Łączenie tekstów to powszechne działanie w VBA. Teoretycznie do dyspozycji mamy dwa znaki złączające: ampersand: & oraz plus:+. W praktyce jednak nie każdy zdaje sobie sprawę z faktu, że w pewnych okolicznościach zamienne zastosowanie łączników da odmienne wyniki. I choć zagadnienie to dotyczy szczególnie operacji w środowisku Access VBA myślę, że warto pamiętać o różnicach szczególnie gdy pracować będziemy ze zmiennymi.
Ampersand łączyć będzie tekst w każdych okolicznościach i niezależnie od bieżącej wartości przechowywanej w zmiennej.
Plus łączyć będzie teksty tak długo jak zmienne będą przechowywać jakąkolwiek wartość, jeżeli jednak jedna ze zmiennych przechowywać będzie wartość Null to wynikiem złączenia z wykorzystaniem operatora plus również będzie Null.
Różnicę w działaniu operatorów najprościej będzie zaprezentować na poniższym przykładzie gdzie wykorzystane zostały znaki łączenia tekstu w pracy ze zmiennymi, w tym ze zmienną o wartości Null.
Ampersand łączyć będzie tekst w każdych okolicznościach i niezależnie od bieżącej wartości przechowywanej w zmiennej.
Plus łączyć będzie teksty tak długo jak zmienne będą przechowywać jakąkolwiek wartość, jeżeli jednak jedna ze zmiennych przechowywać będzie wartość Null to wynikiem złączenia z wykorzystaniem operatora plus również będzie Null.
Różnicę w działaniu operatorów najprościej będzie zaprezentować na poniższym przykładzie gdzie wykorzystane zostały znaki łączenia tekstu w pracy ze zmiennymi, w tym ze zmienną o wartości Null.
Subskrybuj:
Posty (Atom)