'********************************************************************************************************** ' 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 '********************************************************************************************************** ' Nazwa: czyPrawidlowyArkusz ' Autor: mielk | 2012-11-16 ' ' Opis: Funkcja sprawdzająca czy podany arkusz Excela jest prawidłowy i można odwoływać się ' do jego właściwości i metod bez obawy, że zostanie wygenerowany błąd. ' ' Funkcja jest bardzo pomocna, ponieważ pozwala uniknąć błędu ' Run-time error '-2147221080 (800401a8)': Automation error. ' Błąd ten jest generowany w sytuacji, kiedy kod próbuje się odnieść do właściwości ' lub metody zmiennej arkuszowej, ale arkusz, do którego odnosi się ta zmienna, ' został wcześniej usunięty lub plik, w którym ten arkusz się znajduje został ' zamknięty. ' ' Argumenty: ' arkusz Sprawdzany arkusz. ' ' Zwraca: ' Boolean True - jeżeli sprawdzany arkusz jest prawidłowy i bez obaw można się odnosić do ' jego właściwości i metod. ' False - jeżeli podany arkusz jest nieprawidłowy (zazwyczaj przyczyną jest fakt, ' że plik Excela, w którym znajduje się ten arkusz został wcześniej zamknięty ' lub arkusz został usunięty). ' ' ' --- Zmiany ---------------------------------------------------------------------------------------------- ' 2012-11-16 mielk Utworzenie funkcji. '********************************************************************************************************** Public Function czyPrawidlowyArkusz(arkusz As Excel.Worksheet) As Boolean Const NAZWA_METODY As String = "czyPrawidlowyArkusz" '------------------------------------------------------------------------------------------------------ Dim strNazwaArkusza As String '------------------------------------------------------------------------------------------------------ On Error Resume Next strNazwaArkusza = arkusz.name 'Jeżeli nazwa podanego arkusza została przypisana do zmiennej [strNazwaArkusza], oznacza to, że arkusz 'jest prawidłowy i można odwoływać się do jego właściwości bez obawy o pojawienie się błędów. czyPrawidlowyArkusz = VBA.Len(strNazwaArkusza) End Function