Проблемы
При использовании свойства Location или Location.Address вертикальных или горизонтальных разрывов страниц в макросе Microsoft Visual Basic для приложений может появилось следующее сообщение об ошибке:
Ошибка времени выполнения "9": индекс вне диапазона
Причина
Эта проблема может возникнуть, если выполняются следующие условия:
-
Активная ячейка находится над горизонтальным разрывом страницы или слева от вертикального разрыва страницы, на который ссылается индекс HPageBreaks или VPageBreaks.
-
Вертикальное или горизонтальное расположение разрыва страницы находится от экрана справа от видимого окна или под видимым окном книги.
-
В Microsoft Excel используется макрос Visual Basic для приложений, аналогичный следующему коду:
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
Обходное решение
Корпорация Майкрософт предоставляет примеры программирования только для иллюстраций без гарантий, выраженных или подразумеваемых. Это включает, помимо прочего, подразумеваемые гарантии товарной пригодности или пригодности для конкретной цели. В этой статье предполагается, что вы знакомы с демонстрируемым языком программирования и средствами, используемыми для создания и отладки процедур. Инженеры службы поддержки Майкрософт могут помочь объяснить функциональность конкретной процедуры, но они не будут изменять эти примеры, чтобы предоставить дополнительные функциональные возможности или создать процедуры в соответствии с вашими конкретными требованиями. Чтобы избежать этой проблемы, добавьте код для выбора последней ячейки, используемой на листе, прежде чем код будет использовать свойство Расположение горизонтальных или вертикальных разрывов страниц. Например, используйте следующий код, чтобы выбрать конечную ячейку, использовать свойство Location, а затем повторно выбрать исходную активную ячейку:
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
После вычисления свойства Location можно снова выбрать исходную активную ячейку. Если вы используете код для прокрутки между первой и последней ячейками или выбираете последнюю ячейку и сразу же повторно выбираете начальную ячейку, ошибка может по-прежнему возникать. Экран должен быть перерисовывается, а свойство Location вычисляется для эффективного обходного решения. Если вы используете приведенный выше код с
Application.ScreenUpdating = False
Чтобы предотвратить перерисовку экрана, проблема по-прежнему возникает.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Дополнительная информация
Если вы используете метод Count со свойством VPageBreaks или HPageBreaks, вы можете получить нулевой результат. Это происходит в соответствии с условиями, перечисленными в разделе "Причина". Если разрыв страницы виден, метод Count может дать правильный ответ. Метод Count для вертикальных или горизонтальных разрывов страниц может дать ожидаемый результат, если разрыв страницы находится рядом с видимой частью окна книги. Решение, указанное ранее, можно использовать для получения ожидаемого количества.Разрывы страниц, расположенные справа от окна книги или под окном книги, могут включить работу метода Count и расположение разрыва страницы, если расстояние от окна до разрыва страницы меньше половины расстояния между разрывами страниц.
Ссылки
Дополнительные сведения о том, как ловить ошибки в макросе, щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:
213637 Использование функции "On Error" для обработки ошибок в макросе