'********************************************************************************************************** ' 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 '********************************************************************************************************** ' Nazwa: liczWymiary ' Autor: mielk | 2012-03-03 ' ' Opis: Funkcja zwraca liczbę wymiarów podanej tablicy VBA. ' ' Argumenty: ' tablica Tablica, której liczba wymiarów ma zostać zwrócona. ' ' Zwraca: ' Integer Liczba wymiarów podanej tablicy VBA. ' Jeżeli podana wartość nie jest tablicą lub jest zadeklarowana jako tablica ' dynamiczna, ale nie przypisano jeszcze do niej liczby wymiarów, zwracana ' jest wartość 0. ' ' ' --- Zmiany ---------------------------------------------------------------------------------------------- ' 2012-03-03 mielk Utworzenie funkcji ' 2014-06-15 mielk Zwracany typ zmieniony na Integer, żeby umożliwić zwracanie wartości -1, ' jeżeli podany parametr nie jest w ogóle tablicą. '********************************************************************************************************** Public Function liczWymiary(tablica As Variant) As Integer Const NAZWA_METODY As String = "liczWymiary" '------------------------------------------------------------------------------------------------------ Dim granica As Long '------------------------------------------------------------------------------------------------------ If VBA.IsArray(tablica) Then On Error GoTo NieistniejacyWymiar Do granica = UBound(tablica, liczWymiary + 1) liczWymiary = liczWymiary + 1 Loop Else liczWymiary = -1 End If '---------------------------------------------------------------------------------------------------------- NieistniejacyWymiar: End Function