'********************************************************************************************************** ' Nazwa: nastepnyWidocznyWiersz ' Autor: mielk | 2013-03-24 ' ' Opis: Funkcja zwracająca numer następnego widocznego wiersza w górę lub w dół od podanego ' wiersza w określonym arkuszu Excela ' ' Argumenty: ' arkusz Arkusz, na którym przeprowadzone będzie szukanie następnego widocznego wiersza. ' poczatkowyWiersz Początkowy wiersz, z którego rozpoczyna się szukanie następnego widocznego wiersza. ' kierunek Kierunek poszukiwania następnego widocznego wiersza. ' * Jedyne dostępny wartości dla tego parametru to xlUp i xlDown. ' * Teoretycznie do funkcji można też podać inne kierunki zdefiniowane w enumeracji ' xlDirection (xlToLeft i xlToRight), ale funkcja zwróci w takim przypadku 0, ' ponieważ wiersze nie mogą być przeszukiwane horyzontalnie. ' ' Zwraca: ' Long Numer indeksu następnego widocznego wiersza w stronę określoną przez parametr ' [kierunek], począwszy od podanego wiersza w określonym arkuszu. ' ' Funkcja zwraca 0, jeżeli powyżej (lub poniżej, w zależności od wartości parametru ' [kierunek]) od podanego wiersza nie ma żadnego widocznego wiersza. ' ' Żeby uzyskać numer indeksu następnego widocznego wiersza w całym arkuszu Excela, ' wystarczy wywołać tę funkcję z następującymi argumentami wejściowymi: ' poczatkowyWiersz = 0 oraz kierunek = xlDown. ' ' ' 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 nastepnyWidocznyWiersz(arkusz As Excel.Worksheet, poczatkowyWiersz As Long, _ kierunek As XlDirection) As Long Const NAZWA_METODY As String = "nastepnyWidocznyWiersz" '------------------------------------------------------------------------------------------------------ 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.xlUp: intPrzesuniecie = -1 '| Case Excel.xlDown: intPrzesuniecie = 1 '| Case Else '| nastepnyWidocznyWiersz = poczatkowyWiersz '| GoTo PunktWyjscia '| End Select '| '----------------------------------------------------------------------------------------------------| 'Przechodź po kolei przez wszystkie wiersze w dół lub w górę od wskazanego wiersza (w zależności ----| 'od wartości parametru [kierunek] i sprawdzaj czy są one widoczne. '| nastepnyWidocznyWiersz = poczatkowyWiersz '| Do '| nastepnyWidocznyWiersz = nastepnyWidocznyWiersz + intPrzesuniecie '| If Not arkusz.rows(nastepnyWidocznyWiersz).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