Sintomas
Quando você usa a propriedade Location ou Location. Address de quebras de página verticais ou horizontais em uma macro do Microsoft Visual Basic for Applications, você pode receber a seguinte mensagem de erro:
Erro em tempo de execução ' 9 ': subscrito fora do intervalo
Causa
Esse problema pode ocorrer se as seguintes condições forem verdadeiras:
-
A célula ativa está acima da quebra de página horizontal ou à esquerda da quebra de página vertical referida pelo índice HPageBreaks ou VPageBreaks .
-
O local da quebra de página vertical ou horizontal está fora da tela à direita da janela visível ou abaixo da janela visível da pasta de trabalho.
-
Você usa uma macro do Visual Basic for Applications no Microsoft Excel semelhante ao código a seguir:
Sub TestHorizontal() ActiveSheet.Range("CZ1000").Value = 1 MsgBox ActiveSheet.HPageBreaks.Count MsgBox ActiveSheet.HPageBreaks(1).Location.Address MsgBox ActiveSheet.HPageBreaks(2).Location.AddressEnd 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.AddressEnd Sub
Solução alternativa
A Microsoft fornece exemplos de programação somente para ilustração, sem garantia expressa ou implícita. Isso inclui, entre outros, as garantias implícitas de comercialização ou adequação a uma finalidade específica. Este artigo pressupõe que você esteja familiarizado com a linguagem de programação que está sendo demonstrada e com as ferramentas usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um procedimento específico, mas eles não modificarão esses exemplos para fornecer funcionalidade adicional ou construir procedimentos para atender a seus requisitos específicos. Para evitar esse problema, adicione código para selecionar a última célula usada na planilha antes de o código usar a propriedade Location de quebras de página horizontais ou verticais. Por exemplo, use o código a seguir para selecionar a célula final, use a propriedade Location e, em seguida, selecione novamente a célula ativa 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.SelectEnd Sub
Depois que a propriedade Location for calculada, você poderá selecionar novamente a célula ativa original. Se você usar o código para rolar entre a primeira e a última célula ou selecionar a última célula e imediatamente selecionar novamente a célula inicial, o erro ainda poderá ocorrer. A tela deve ser redesenhada e a propriedade Location ser calculada para que a solução alternativa seja efetiva. Se você usar o código acima com
Application.ScreenUpdating = False
para evitar a redesenho de tela, o problema ainda ocorre.
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".
Informações adicionais
Se você usar o método cont com a propriedade VPageBreaks ou HPageBreaks , você pode receber um resultado de zero. Isso ocorre nas condições listadas na seção "causa". Se uma quebra de página estiver visível, o método Count poderá dar a resposta correta. O método Count para quebras de página horizontais ou verticais pode dar o resultado esperado se uma quebra de página estiver próxima à parte visível da janela da pasta de trabalho. A solução alternativa fornecida anteriormente pode ser usada para obter a contagem esperada. Quebras de página à direita da janela da pasta de trabalho ou abaixo da janela da pasta de trabalho podem permitir que o método de contagem funcione e que a quebra de página seja localizada, se a distância da janela para a quebra de página for inferior à metade da distância entre quebras de página.
Referências
Para obter mais informações sobre como interceptar erros em uma macro, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:
213637 Como usar "On Error" para manipular erros em uma macro