piątek, 21 czerwca 2013

Funkcje informacyjne, część 4/5- funkcje VBA

Kontynuując omawianie funkcji informacyjnych (z grupy VBA) przedstawię na zakończenie dwie funkcje: IsMissing, IsError.

1. Funkcja IsMissing ma swoje szczególne zastosowanie w tworzeniu własnych funkcji użytkownika. Wykorzystamy ją wtedy gdy dany parametr funkcji jest opcjonalny. Wewnątrz funkcji zapewne będziemy chcieli przetestować czy użytkownik podał ten parametr czy też go pominął.

Wyobraźmy sobie funkcję, która standardowo liczy pole kwadratu, a jeżeli użytkownik poda długość dwóch boków to funkcja obliczy pole prostokąta przyjmując jako wymiary boków figury kolejne podane argumenty.

1Function PoleKwadratuProstokąta(długośćA, Optional DługośćB)
2 
3    If IsMissing(DługośćB) Then
4        PoleKwadratuProstokąta = długośćA * długośćA
5    Else
6        PoleKwadratuProstokąta = długośćA * DługośćB
7    End If
8    
9End Function

W powyższym przykładzie dzięki funkcji IsMissing sprawdzamy czy użytkownik podał drugi z argumentów i określamy jaki wzór zostanie zastosowany do obliczeń.

Funkcja IsMissing nie ma szczególnego zastosowania w innych przypadkach. Sprawdzenie pustych komórek, nieprzypisanych zmiennych, pustych ciągów tekstowych każdorazowo zwraca wartość False jak dla poniższych przykładów:
1Dim ZmiennaA
2Debug.Print IsMissing(ZmiennaA)
3Debug.Print IsMissing("")
4Debug.Print IsMissing(Range("A1"))

2. Funkcja IsError zwraca wartość True w sytuacji gdy testowana wartość lub zmienna zwracają błąd. Funkcja ta znajdzie swoje główne zastosowanie w kilku przypadkach- w sytuacji gdy testujemy wartość zwracaną przez naszą funkcję, w sytuacji gdy sprawdzamy czy dana komórka zawiera błąd (bład formuły), w sytuacji testowania wartości zwracanych przez funkcje arkuszowe wywołanych jako rozwinięcie obiektu Application. Przyjrzyjmy się przykładom i komentarzom w poniższym kodzie:
1'instrukcja wywołująca błąd
2Debug.Print CVErr(6)
3Debug.Print IsError(CVErr(6)) '>>True
4 
5'zakładając, że w komórce A1 formuła zwraca błąd,
6'oraz że komórki od A2:A10 pozostają puste to
7Debug.Print IsError(Range("A1")) '>>True
8Debug.Print IsError(Range("A2")) '>>False
9Debug.Print IsError(Application.Sum(Range("A1:A10"))) '>>True

Uwaga! Poniższe wywołanie zwróci błąd kompilacji, funkcja IsError nie będzie skuteczna w tym aspekcie. W celu 'przechwycenia' tego błędu niezbędne będzie zastosowanie procedury obsługi błędów.

1Debug.Print IsError(WorksheetFunction.Sum(Range("A1:A10")))

Brak komentarzy:

Prześlij komentarz