Czy zdefiniowana tablica


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
'**********************************************************************************************************
' Nazwa:        czyZdefiniowanaTablica
' Autor:        mielk | 2012-03-27
'
' Opis:         Funkcja sprawdzająca czy podany parametr jest niepustą tablicą.
'
' Argumenty:
'   arr         Sprawdzany parametr.
'
' Zwraca:
'   Boolean     True - jeżeli parametr [arr] jest tablicą, której wymiary zostały już zadeklarowane.
'               False - jeżeli parametr [arr] nie jest tablicą lub jest tablicą dynamiczną, której wymiary
'                      nie zostały jeszcze zdefiniowane.
'
' --- Zmiany ----------------------------------------------------------------------------------------------
' 2012-03-27        mielk       Stworzenie funkcji.
'**********************************************************************************************************
Public Function czyZdefiniowanaTablica(arr As Variant) As Boolean
    Const NAZWA_METODY As String = "czyZdefiniowanaTablica"
    '------------------------------------------------------------------------------------------------------
    Dim gornaGranica As Long
    Dim dolnaGranica As Long
    '------------------------------------------------------------------------------------------------------


    'Funkcja próbuje przypisać do zmiennych dolnaGranica i gornaGranica dolną i górną granicę podanego
    'parametru.
    'Jeżeli podany argument nie jest tablicą lub jest dynamiczną tablicą bez zadeklarowanych jeszcze
    'wymiarów, wygenerowany zostanie błąd, który spowoduje przeniesienie kodu do labelu NieTablica,
    'co z kolei sprawi, że cała funkcja zwróci wartość False.
    On Error GoTo NieTablica
    gornaGranica = UBound(arr, 1)
    dolnaGranica = LBound(arr, 1)

    'W niektórych przypadkach pobranie właściwości LBound i UBound będzie możliwe nawet jeśli podany
    'argument jest pustą tablicą (np. dla tablic podanych jako parametr typu ParamArray). W takiej
    'sytuacji wartość UBound będzie jednak mniejsza niż wartość LBound, dlatego poniższe sprawdzenie
    'pozwoli rozpoznać takie tablice i zwrócić dla nich wartość False.
    czyZdefiniowanaTablica = (gornaGranica >= dolnaGranica)


'==========================================================================================================
PunktWyjscia:
    Exit Function

'----------------------------------------------------------------------------------------------------------
NieTablica:
    GoTo PunktWyjscia

End Function