Você recebe uma mensagem de erro "Subscrito fora do intervalo" ao usar HPageBreaks ou VPageBreaks.Location no Excel

Sintomas

Ao usar 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:

Observação

Erro de tempo de execução '9':
Subscrito fora do intervalo

Causa

Esse problema poderá 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 de 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.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
    
    

Solução alternativa

A Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não se limita a, 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 ajudá-lo, fornecendo a explicação da funcionalidade de determinado procedimento, mas não modificarão estes exemplos para fornecer funcionalidade adicional nem criarão procedimentos específicos para atender às suas necessidades específicas.
Para evitar esse problema, adicione código para selecionar a última célula usada na planilha antes que o código use a propriedade Location de quebras de página horizontais ou verticais. Por exemplo, use o seguinte código para selecionar a célula final, use a propriedade Local 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.Select

End Sub

Depois que a propriedade Local 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 selecionar imediatamente novamente a célula inicial, o erro ainda poderá ocorrer. A tela deve redesenhar e a propriedade Location deve ser calculada para que a solução alternativa seja efetiva. Se você usar o código acima com

Application.ScreenUpdating = False

Para evitar o redesenho da tela, o problema ainda ocorre.

Status

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

Mais informações

Se você usar o método Count com a propriedade VPageBreaks ou HPageBreaks, poderá receber um resultado 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á fornecer a resposta correta. O método Count para quebras de página verticais ou horizontais pode fornecer 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.

As quebras de página que estão à direita da janela da pasta de trabalho ou abaixo da janela da pasta de trabalho podem permitir que o método Count funcione e que a quebra de página seja localizada, se a distância da janela à quebra de página for menor que a metade da distância entre as 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 Microsoft:

213637 Como usar "On Error" para lidar com erros em uma macro