Z pytaniem umieszczonym w tytule niniejszego posta spotkałem się kilkukrotnie, zarówno przeglądając różne wpisy i pytania na forach internetowych, jak również prowadząc szkolenie z zakresu VBA dla Excela. Chodzi bowiem o sytuację, w której chcemy określić rodzaj informacji zawartej w komórce z uwzględnieniem rodzaju formatowania jaki został zastosowany w danym zakresie arkusza.
Gdzie jednak znajduje się problem? Z punktu widzenia VBA liczba, data, czas i procent- wszystkie te elementy są liczbami. Także wartość Prawda/Fałsz w praktyce jest liczbą odpowiadającą 1 lub 0. W naszej sytuacji określić rzeczywisty typ danych znajdujących się w komórce.
W celu rozwiązania tego problemu wystarczy skonstruować prostą funkcję, której pełną postać znajdziecie Państwo poniżej. Kluczowa w tej funkcji pozostaje kolejność sprawdzania poszczególnych typów. Prześledźmy to na przykładzie typu liczbowego, który sprawdzany jest jako ostatni. Musimy się najpierw upewnić, że podane wartości nie są żadnym z typów: datą, wartością czasu, procentem lub wartością Prawda/Fałsz. Każdy z tych typów będąc domyślnie numerycznym zostałby więc rozpoznany jako liczba. Tymczasem nasza funkcja wydaje się działać prawidłowo co prezentuje poniższy zrzut ekranu.

01 | Public Function TypWartości(KOMÓRKA As Range) |
03 | If IsEmpty(KOMÓRKA) Then |
05 | ElseIf Application.IsText(KOMÓRKA) Then |
06 | TypWartości = "TEKSTOWA" |
07 | ElseIf Application.IsLogical(KOMÓRKA) Then |
08 | TypWartości = "LOGICZNA" |
09 | ElseIf Application.IsErr(KOMÓRKA) Or Application.IsError(KOMÓRKA) Then |
11 | ElseIf IsDate(KOMÓRKA) Then |
13 | ElseIf InStr(1, KOMÓRKA.Text, ":" ) <> 0 Then |
15 | ElseIf Right(KOMÓRKA.Text, 1) = "%" Then |
16 | TypWartości = "PROCENT" |
17 | ElseIf IsNumeric(KOMÓRKA) Then |
18 | TypWartości = "LICZBA" |
Brak komentarzy:
Prześlij komentarz