Symptomy
W przypadku korzystania z właściwości Lokalizacja lub Location.Address pionowych lub poziomych podziałów stron makra microsoft Visual Basic for Applications może zostać wyświetlony następujący komunikat o błędzie:
Błąd czasu wykonywania '9':Indeks dolny poza zakresem
Przyczyna
Ten problem może wystąpić, jeśli spełnione są następujące warunki:
-
Aktywna komórka znajduje się powyżej poziomego podziału strony lub po lewej stronie pionowego podziału strony, do którego odwołuje się indeks HPageBreaks lub VPageBreaks.
-
Pionowa lub pozioma lokalizacja podziału strony znajduje się poza ekranem po prawej stronie widocznego okna lub poniżej widocznego okna skoroszytu.
-
Makra Visual Basic for Applications w programie Microsoft Excel są podobne do następującego kodu:
Sub TestHorizontal() ActiveSheet.Range("CZ1000").Value = 1 MsgBox ActiveSheet.HPageBreaks.Count MsgBox ActiveSheet.HPageBreaks(1).Location.Address MsgBox ActiveSheet.HPageBreaks(2).Location.AddressEnd SubSub TestVertical() ActiveSheet.Range("CZ1000").Value = 1 MsgBox ActiveSheet.VPageBreaks.Count MsgBox ActiveSheet.VPageBreaks(1).Location.Address MsgBox ActiveSheet.VPageBreaks(2).Location.Address MsgBox ActiveSheet.VPageBreaks(3).Location.AddressEnd Sub
Obejście
Firma Microsoft udostępnia przykłady programowania tylko na ilustracje, bez gwarancji wyrażonej lub dorozumianej. Dotyczy to między innymi dorozumianych gwarancji przydatności handlowej lub przydatności do określonego celu. W tym artykule założono, że znasz język programowania, który jest prezentowany, oraz narzędzia służące do tworzenia i debugowania procedur. Inżynierowie pomocy technicznej firmy Microsoft mogą pomóc w objaśnieniu funkcjonalności określonej procedury, ale nie zmodyfikują tych przykładów w celu zapewnienia dodatkowych funkcji ani skonstruowania procedur spełniających określone wymagania. Aby zapobiec temu problemowi, dodaj kod, aby zaznaczyć ostatnią komórkę używaną w arkuszu, zanim kod użyje właściwości Lokalizacja poziomych lub pionowych podziałów stron. Na przykład użyj następującego kodu, aby zaznaczyć komórkę końcą, użyj właściwości Lokalizacja, a następnie ponownie zaznacz oryginalną aktywną komórkę:
Sub CheckPageBreaks() 'Set object "currcell" equal to active cell. Set currcell = ActiveCell 'Select the last cell on the worksheet that has data. Range("IV65536").Select 'Include code with Location property here. x = ActiveSheet.HPageBreaks(2).Location.Address MsgBox x 'Example sets x equal to address of second horizontal page break. 'Then message box displays the address of the page break. 'Select original active cell. currcell.SelectEnd Sub
Po obliczeniu właściwości Lokalizacja można ponownie zaznaczyć oryginalną aktywną komórkę. Jeśli użyjesz kodu do przewinięcia pierwszej i ostatniej komórki lub zaznaczysz ostatnią komórkę i natychmiast ponownie zaznaczysz początkową komórkę, błąd może nadal występować. Ekran musi zostać przerysowany, a właściwość Lokalizacja zostanie obliczona, aby obejście było skuteczne. Jeśli używasz powyższego kodu z
Application.ScreenUpdating = False
aby zapobiec ponownemu przerysowyniu ekranu, problem nadal występuje.
Stan
Firma Microsoft potwierdziła, że jest to problem w produktach firmy Microsoft wymienionych w sekcji "Dotyczy".
Więcej informacji
Jeśli użyjesz metody Count z właściwością VPageBreaks lub HPageBreaks, możesz otrzymać wynik zero. Dzieje się tak w warunkach wymienionych w sekcji "Przyczyna". Jeśli podział strony jest widoczny, metoda Zlicz może udzielić poprawnej odpowiedzi. Metoda Zlicz dla pionowych lub poziomych podziałów stron może dać oczekiwany wynik, jeśli podział strony znajduje się w pobliżu widocznej części okna skoroszytu. Obejście podane wcześniej może posłużyć do uzyskania oczekiwanej liczby.Podziały stron znajdujące się po prawej stronie okna skoroszytu lub poniżej okna skoroszytu mogą umożliwić działanie metody Count i zlokalizowanie tego podziału strony, jeśli odległość od okna do podziału strony jest mniejsza niż połowa odległości między podziałami stron.
Informacje
Aby uzyskać więcej informacji na temat wyłapywać błędy w makkrach, kliknij następujący numer artykułu, aby wyświetlić ten artykuł w bazie wiedzy Microsoft Knowledge Base:
213637 Jak używać komunikatu "Przy błędzie" do obsługi błędów makra