Síntomas
Cuando usa la propiedad Location o Location.Address en los saltos de página verticales u horizontales de una macro de Microsoft Visual Basic para Aplicaciones, puede recibir el mensaje de error siguiente:
Error en tiempo de ejecución '9':
subíndice fuera del intervalo
Causa
Este problema puede producirse si se cumplen las condiciones siguientes:
-
La celda activa está por encima del salto de página horizontal o a la izquierda del salto de página vertical referidos por el índice HPageBreaks o VPageBreaks.
-
La ubicación del salto de página horizontal está fuera de la pantalla, a la derecha de la ventana visible o bajo la ventana visible del libro.
-
Use la macro de Visual Basic para Aplicaciones en Microsoft Excel de modo similar al código siguiente:
Sub TestHorizontal()
ActiveSheet.Range("CZ1000").Value = 1
MsgBox ActiveSheet.HPageBreaks.Count
MsgBox ActiveSheet.HPageBreaks(1).Location.Address
MsgBox ActiveSheet.HPageBreaks(2).Location.Address
End Sub
Sub 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.Address
End Sub
Solución
Microsoft proporciona ejemplos de programación solamente como ilustración, sin ninguna garantía ya sea expresa o implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. En este artículo se da por supuesto que ya conoce el lenguaje de programación que se muestra, así como las herramientas empleadas para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos adaptados a sus necesidades específicas.
Para prevenir este problema, agregue código para seleccionar la última celda usada en la hoja de cálculo antes de que el código use la propiedad Location de los saltos de página verticales u horizontales. Por ejemplo, use el código siguiente para seleccionar la celda final, use la propiedad Location y, a continuación, vuelva a seleccionar la celda activa original:
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.Select
End Sub
Después de que se haya calculado la propiedad Location, puede seleccionar de nuevo la celda activo original. Si usa código para desplazarse entre la primera y la última celda, o selecciona la última celda y vuelve a seleccionar inmediatamente la celda de partida, el error puede seguirse produciendo. Para que el modo de evitar el problema sea efectivo, debe rehacerse la pantalla y ser calculada la propiedad Location. Si usa el código anterior con
Application.ScreenUpdating = False
Para impedir que se rehaga la pantalla, el problema se sigue produciendo.
Estado
Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a".
Más información
Si usa el método Count con las propiedades VPageBreaks o HPageBreaks, puede recibir un resultado de cero. Esto se produce bajo las condiciones enumeradas en la sección "Causa". Si el salto de página es visible, el método Count puede dar la respuesta correcta. El método Count para los saltos de página horizontal o vertical puede dar lugar al resultado esperado si un salto de página está cerca de la parte visible de la ventana del libro. La manera de evitar el problema antes explicada se puede usar para obtener la cuenta esperada.
Los saltos de página que están a la derecha o debajo de la ventana del libro pueden habilitar el método Count para que ese salto de página sea ubicado, en caso de que la distancia desde la ventana al salto de página sea menor que la mitad de la distancia entre dos saltos de página.
Referencias
Para obtener más información acerca de cómo capturar errores de una macro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
213637 Cómo utilizar "On Error" para tratar errores en una macro