Sem espaço na pilha (Erro 28)Out of stack space (Error 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.The stack is a working area of memory that grows and shrinks dynamically with the demands of your executing program. Esse erro tem as seguintes causas e soluções:This error has the following causes and solutions:

  • Há muitas chamadas de procedimento Function, Sub ou Property ativas.You have too many active Function, Sub, or Property procedure calls. Verifique se os procedimentos não estão aninhados de forma muito profunda.Check that procedures aren't nested too deeply. Isso se aplica particularmente a procedimentos recursivos, ou seja, procedimentos que chamam a si mesmos.This is especially true with recursive procedures, that is, procedures that call themselves. Verifique se os procedimentos recursivos terminam adequadamente.Make sure recursive procedures terminate properly. Use a caixa de diálogo Calls para exibir os procedimentos que estão ativos (na pilha).Use the Calls dialog box to view which procedures are active (on the stack).

  • A variável local requer mais espaço de variável local do que o espaço disponível.Your local variables require more local variable space than is available.

    Em vez disso, tente declarar algumas variáveis no nível de módulo.Try declaring some variables at the module level instead. 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.You can also declare all variables in the procedure static by preceding the Property, Sub, or Function keyword with Static. Também é possível usar a instrução Static para declarar variáveis Static individuais dentro de procedimentos.Or you can use the Static statement to declare individual Static variables within procedures.

  • Há muitas cadeias de caracteres de comprimento fixo.You have too many fixed-length strings. 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.Fixed-length strings in a procedure are more quickly accessed, but use more stack space than variable-length strings, because the string data itself is placed on the stack. Tente redefinir algumas das cadeias de caracteres de comprimento fixo como cadeias de caracteres de comprimento variável.Try redefining some of your fixed-length strings as variable-length strings. 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).When you declare variable-length strings in a procedure, only the string descriptor (not the data itself) is placed on the stack. 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.You can also define the string at module level where it requires no stack space. 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.Variables declared at module level are Public by default, so the string is visible to all procedures in the module.

  • Há muitas chamadas de função DoEvents aninhadas.You have too many nested DoEvents function calls. Use a caixa de diálogo Calls para exibir os procedimentos que estão ativos na pilha.Use the Calls dialog box to view which procedures are active on the stack.

  • O código disparou uma cascata de eventos.Your code triggered an event cascade. Uma cascata de eventos ocorre quando é disparado um evento que chama um procedimento de evento que já está na pilha.An event cascade is caused by triggering an event that calls an event procedure that's already on the stack. 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.An event cascade is similar to an unterminated recursive procedure call, but it's less obvious, since the call is made by Visual Basic rather than by an explicit call in your code. Use a caixa de diálogo Calls para exibir os procedimentos que estão ativos (na pilha).Use the Calls dialog box to view which procedures are active (on the stack).

Para exibir a caixa de diálogo chamadas , selecione o botão chamadas à direita da caixa procedimento na janela Depurar ou escolha o comando chamadas .To display the Calls dialog box, select the Calls button to the right of the Procedure box in the Debug window or choose the Calls command. Saiba mais selecionando o item em questão e pressionando F1 (no Windows) ou HELP (no Macintosh).For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

Suporte e comentáriosSupport and feedback

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação?Have questions or feedback about Office VBA or this documentation? 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.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.