Recebe uma mensagem de erro "Subscript fora do alcance" quando utiliza HPageBreaks ou VPageBreaks.Localização no Excel


Sintomas


Quando utilizar a propriedade localização ou localização.Endereço de quebras de página verticais ou horizontais num macro Microsoft Visual Basic for Applications, poderá receber a seguinte mensagem de erro:
Erro de tempo de execução '9':Subscript fora do alcance

Causa


Este problema pode ocorrer se as seguintes condições forem verdadeiras:
  • A célula ativa está acima da rutura da página horizontal ou à esquerda da rutura de página vertical que é referida pelo índice HPageBreaks ou VPageBreaks.
  • O local de rutura da página vertical ou horizontal está fora do ecrã à direita da janela visível ou abaixo da janela visível do livro.
  • Utiliza um macro Visual Basic para Aplicações no Microsoft Excel semelhante ao seguinte código:
    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


A Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isto inclui, mas não se limita a, as garantias implícitas de mercadoriedade ou aptidão para um determinado propósito. Este artigo assume que está familiarizado com a linguagem de programação que está a ser demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não irão modificar estes exemplos para fornecer funcionalidades adicionais ou procedimentos de construção para satisfazer os seus requisitos específicos. Para evitar este problema, adicione código para selecionar a última célula utilizada na folha de cálculo antes que o código utilize a propriedade localização de quebras de página horizontais ou verticais. Por exemplo, utilize o seguinte código para selecionar a célula final, use a propriedade Localização e, em seguida, reselele 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
Após o localização da propriedade ser calculada, pode voltar a selecionar a célula ativa original. Se utilizar código para deslocar entre a primeira e a última célula, ou selecionar a última célula e reselectar imediatamente a célula inicial, o erro pode ainda ocorrer. O ecrã deve redesenhar e a propriedade localização ser calculada para que a solução para a solução seja eficaz. Se utilizar o código acima com
Application.ScreenUpdating = False
para evitar a reeparação do ecrã, o problema ainda ocorre.

Estado


A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

Mais Informações


Se utilizar o método Count com a propriedade VPageBreaks ou HPageBreaks, poderá receber um resultado de zero. Isto ocorre nas condições enumeradas na secção "Causa". Se uma rutura de página for visível, o método Count pode dar a resposta correta. O método Count para quebras de páginas verticais ou horizontais pode dar o resultado esperado se uma rutura de página estiver perto da parte visível da janela do livro. A solução dada anteriormente pode ser usada para obter a contagem esperada. As quebras de página que estão à direita da janela do livro ou abaixo da janela do livro podem permitir que o método Count funcione e que a rutura da página seja localizada, se a distância entre a janela e a rutura da página for inferior a metade da distância entre as quebras de página.

Referências


Para obter mais informações sobre como capturar erros numa macro, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
213637 Como usar "On Error" para lidar com erros numa macro