Sem espaço na pilha (Erro 28)

A pilha é uma área de trabalho de memória que cresce e é reduzida dinamicamente de acordo com a demanda do programa em execução. Esse erro tem as seguintes causas e soluções:

  • Há muitas chamadas de procedimento Function, Sub ou Property ativas. Verifique se os procedimentos não estão aninhados de forma muito profunda. Isso se aplica particularmente a procedimentos recursivos, ou seja, procedimentos que chamam a si mesmos. Verifique se os procedimentos recursivos terminam adequadamente. Use a caixa de diálogo Calls para exibir os procedimentos que estão ativos (na pilha).

  • A variável local requer mais espaço de variável local do que o espaço disponível.

    Em vez disso, tente declarar algumas variáveis no nível de módulo. Você pode também declarar todas as variáveis no procedimento de forma estática incluindo, antes da palavra-chave Property, Sub ou Function, a palavra Static. Também é possível usar a instrução Static para declarar variáveis Static individuais dentro de procedimentos.

  • Há muitas cadeias de caracteres de comprimento fixo. Cadeias de caracteres de comprimento fixo em um procedimento são acessadas mais rapidamente, mas usam mais espaço na pilha do que cadeias de caracteres de comprimento variável, pois os próprios dados de cadeia de caracteres são colocados na pilha. Tente redefinir algumas das cadeias de caracteres de comprimento fixo como cadeias de caracteres de comprimento variável. Quando você declara cadeias de caracteres de comprimento variável em um procedimento, apenas o descritor de cadeia de caracteres é colocado na pilha (não os dados em si). Você também pode definir a cadeia de caracteres no nível de módulo, em que ela não requer espaço na pilha. Variáveis declaradas no nível de módulo são Public por padrão, assim, a cadeia de caracteres é visível para todos os procedimentos no módulo.

  • Há muitas chamadas de função DoEvents aninhadas. Use a caixa de diálogo Calls para exibir os procedimentos que estão ativos na pilha.

  • O código disparou uma cascata de eventos. Uma cascata de eventos ocorre quando é disparado um evento que chama um procedimento de evento que já está na pilha. Uma cascata de eventos é semelhante a uma chamada de procedimento recursiva não terminada, mas é menos óbvia, pois a chamada é feita pelo Visual Basic, em vez de uma chamada explícita no código. Use a caixa de diálogo Calls para exibir os procedimentos que estão ativos (na pilha).

Para exibir a caixa de diálogo Chamadas , selecione o botão Chamadas à direita da caixa Procedimento na janela Depuração ou escolha o comando Chamadas . Saiba mais selecionando o item em questão e pressionando F1 (no Windows) ou HELP (no Macintosh).

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.