Następna widoczna kolumna


Funkcja nastepnaWidocznaKolumna 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 nastepnaWidocznaKolumna 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
'**********************************************************************************************************
' Nazwa:                nastepnaWidocznaKolumna
' Autor:                mielk | 2013-03-24
'
' Opis:                 Funkcja zwracająca numer następnej widocznej kolumny w lewo lub w prawo od podanej
'                       kolumny w określonym arkuszu Excela
'
' Argumenty:
'   arkusz              Arkusz, na którym przeprowadzone będzie szukanie następnej widocznej kolumny.
'   poczatkowaKolumna   Początkowa kolumna, z której rozpoczyna się szukanie następnej widocznej kolumny.
'   kierunek            Kierunek poszukiwania następnej widocznej kolumny.
'                       * Jedyne dostępny wartości dla tego parametru to xlToLeft i xlToRight.
'                       * Teoretycznie do funkcji można też podać inne kierunki zdefiniowane w enumeracji
'                         xlDirection (xlUp i xlDown), ale funkcja zwróci w takim przypadku 0,
'                         ponieważ kolumny nie mogą być przeszukiwane pionowo.
'
' Zwraca:
'   Long                Numer indeksu następnej widocznej kolumny w stronę określoną przez parametr
'                       [kierunek], począwszy od podanej kolumny w określonym arkuszu.
'
'                       Funkcja zwraca 0, jeżeli w lewą (lub prawą stronę, w zależności od wartości
'                       parametru [kierunek]) od podanej kolumny nie ma żadnej widocznej kolumny.
'
'                       Żeby uzyskać numer indeksu pierwszej widocznej kolumny w całym arkuszu Excela,
'                       wystarczy wywołać tę funkcję z następującymi argumentami wejściowymi:
'                       poczatkowaKolumna = 0 oraz kierunek = xlRight.
'
'
' Wyjątki:
'   NieprawidłowyArkusz             Wywoływany, kiedy arkusz Excela przekazany do tej funkcji w parametrze
'                                   [arkusz] znajduje się w pliku, który został już zamknięty.
'
'
' --- Zmiany ----------------------------------------------------------------------------------------------
' 2012-04-05        mielk           Utworzenie funkcji.
'**********************************************************************************************************
Public Function nastepnaWidocznaKolumna(arkusz As Excel.Worksheet, kolumnaStartowa As Long, _
                                          kierunek As XlDirection) As Long
    Const NAZWA_METODY As String = "nastepnaWidocznaKolumna"
    '------------------------------------------------------------------------------------------------------
    Dim intPrzesuniecie As Integer
    '------------------------------------------------------------------------------------------------------


    'Sprawdź, czy arkusz, w którym będziemy szukać pierwszej niepustej kolumny, jest poprawny -----------|
    'i można odwoływać się do jego właściwości. Jeżeli arkusz nie jest poprawny, kod przeskakuje        '|
    'do labelu NieprawidlowyArkusz i kończy działanie fukcji.                                           '|
    If Not czyPrawidlowyArkusz(arkusz) Then GoTo NieprawidlowyArkusz                                    '|
    '----------------------------------------------------------------------------------------------------|


    '----------------------------------------------------------------------------------------------------|
    Select Case kierunek                                                                                '|
        Case Excel.xlToLeft:    intPrzesuniecie = -1                                                    '|
        Case Excel.xlToRight:   intPrzesuniecie = 1                                                     '|
        Case Else                                                                                       '|
            nastepnaWidocznaKolumna = kolumnaStartowa                                                   '|
            GoTo PunktWyjscia                                                                           '|
    End Select                                                                                          '|
    '----------------------------------------------------------------------------------------------------|


    'Przechodź przez kolejne kolumny w lewo lub w prawo od wskazanej kolumny (w zależności od -----------|
    'wartości parametru [kierunek], tak dugo aż natrafisz na widoczną kolumnę.                          '|
    nastepnaWidocznaKolumna = kolumnaStartowa                                                           '|
    Do                                                                                                  '|
        nastepnaWidocznaKolumna = nastepnaWidocznaKolumna + intPrzesuniecie                             '|
        If Not arkusz.columns(nastepnaWidocznaKolumna).Hidden Then Exit Do                              '|
    Loop                                                                                                '|
    '----------------------------------------------------------------------------------------------------|



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

'----------------------------------------------------------------------------------------------------------
NieprawidlowyArkusz:
    'Obsługa błędów dla sytuacji, kiedy podany arkusz jest nieprawidłowy i nie można odnieść się do jego
    'właściwości (np. plik, w którym znajduje się ten arkusz, został zamknięty).

    GoTo PunktWyjscia

End Function