Проблемы

При использовании свойства 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" для обработки ошибок в макросе

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.