Czy jest w tablicy


Funkcja czyJestWTablicy korzysta podczas działania z innych nie-wbudowanych funkcji prezentowanych na tej stronie, które w związku z tym również muszą być umieszczone w kodzie projektu dla prawidłowego działania tej funkcji.

Nie uwzględnienie ich w kodzie spowoduje wygenerowanie błędu: Compile error: Sub or Function not defined.

Dodatkowe funkcje wykorzystywane w funkcji czyJestWTablicy zostały wymienione poniżej. Klikając w nazwę każdej z nich przeniesiesz się do podstrony zawierającej jej kod:

Dodając powyższe funkcje, zwróć uwagę czy nie były one już wcześniej wykorzystywane w Twoim kodzie. Obecność w jednym projekcie VBA dwóch funkcji publicznych o identycznych nazwach spowoduje wygenerowanie błędu kompilacji o treści: Compile error: Ambiguous name detected: nazwa_funkcji.

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
'**********************************************************************************************************
' Nazwa:                czyJestWTablicy
' Autor:                mielk | 2011-07-19
'
' Opis:                 Funkcja sprawdzająca czy podany tekst bazowy znajduje się w danej tablicy.
'
' Argumenty:
'   wartosc             Tekst bazowy, który będzie poszukiwany w tablicy.
'   tablica             Tablica wartości tekstowych, do której będzie porównywany podany tekst bazowy.
'                       Parametr [tablica] musi być tablicą jednowymiarową, która zawiera tylko wartości
'                       typów prostych (dopuszczalne są wartości innego typu niż String), nie może zawierać
'                       obiektów (w takiej sytuacji zwrócony zostanie wyjątek ObiektyWTablicy).
'   wielkoscZnakowMaZnaczenie
'                       Argument opcjonalny typu Boolean.
'                       Decyduje o tym, czy przy sprawdzaniu zgodności początku tekstu bazowego z podanym
'                       ciągiem znaków, funkcja bierze pod uwagę wielkość liter.
'                       Domyślne ustawienie tego parametru to False, co oznacza, że funkcja nie rozróżnia
'                       wielkości znaków.
'
' Zwraca:
'   Boolean             True - jeżeli tekst bazowy znajduje się w podanej tablicy.
'                       False - jeżeli żaden z elementów tablicy nie jest równy podanemu tekstowi bazowemu.
'
' Wyjątki:
'   NieTablica                      Zwracany, kiedy przekazany do funkcji argument wejściowy [tablica] nie
'                                   jest tablicą lub jest tablicą mającą więcej niż jeden wymiar.
'   ObiektyWTablicy                 Zwracany w sytuacji, gdy przekazana do funkcji tablica oprócz wartości
'                                   typów prostych, zawiera jakikolwiek obiekt.
'
'
' --- Zmiany ----------------------------------------------------------------------------------------------
' 2011-07-19        mielk           Utworzenie funkcji.
'**********************************************************************************************************
Public Function czyJestWTablicy(wartosc As String, tablica As Variant, _
                                          Optional wielkoscZnakowMaZnaczenie As Boolean = False) As Boolean
    Const NAZWA_METODY As String = "startsWith"
    Dim SEPARATOR As String: SEPARATOR = VBA.Chr(0)
    '------------------------------------------------------------------------------------------------------
    Dim tempStr As String
    Dim uMetodaPorownania As VBA.VbCompareMethod
    '------------------------------------------------------------------------------------------------------


    'Funkcja sprawdza czy podany argument [tablica] jest tablicą 1D. ------------------------------------|
    If liczWymiary(tablica) <> 1 Then GoTo NieTablica                                                   '|
    '----------------------------------------------------------------------------------------------------|



    'Zamienia podany przez użytkownika parametr typu Boolean [wielkoscZnakowMaZnaczenie] na jedną ze ----|
    'stałych enumeracji [VbCompareMethod].                                                              '|
    If wielkoscZnakowMaZnaczenie Then                                                                   '|
        uMetodaPorownania = VBA.vbBinaryCompare                                                         '|
    Else                                                                                                '|
        uMetodaPorownania = VBA.vbTextCompare                                                           '|
    End If                                                                                              '|
    '----------------------------------------------------------------------------------------------------|



    'Funkcja próbuje przekonwertować podaną tablicę na ciąg tekstowy przy użyciu wbudowanej funkcji -----|
    'VBA Join. Jeżeli wśród elementów tablic jest jakiś obiekt, zostanie wygenerowany błąd              '|
    'ObiektyWTablicy.                                                                                   '|
    On Error GoTo ObiektyWTablicy                                                                       '|
    tempStr = SEPARATOR & VBA.Join(tablica, SEPARATOR) & SEPARATOR                                      '|
    On Error GoTo 0                                                                                     '|
    '----------------------------------------------------------------------------------------------------|


    czyJestWTablicy = VBA.InStr(1, tempStr, SEPARATOR & wartosc & SEPARATOR, uMetodaPorownania)


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


'-----------------------------------------------
NieTablica:
    'Obsługa błędów dla przypadku, kiedy podany argument [tablica] nie jest tablicą lub posiada więcej niż
    'jeden wymiar.

    GoTo PunktWyjscia


ObiektyWTablicy:
    'Obsługa błędów dla przypadku, jeżeli w tablicy [tablica] znajduje się jakikolwiek obiekt, który nie
    'może zostać przekonwertowany na typ String.

    GoTo PunktWyjscia


End Function