Compartir vía


Espacio fuera de pila (error 28)

La pila es un área de memoria activa que se amplía y reduce de forma dinámica conforme a la demanda del programa en ejecución. Causas y soluciones de este error:

  • Tiene demasiadas llamadas de procedimiento Function, Sub o Property activas. Compruebe que los procedimientos no están anidados demasiado profundamente. Esto es especialmente cierto con procedimientos recursivos, es decir, los procedimientos que se llaman a sí mismos. Asegúrese de que los procedimientos recursivos finalizan correctamente. Use el cuadro de diálogo Llamadas para ver qué procedimientos están activos (en la pila).

  • Las necesidades de espacio de las variables locales exceden el espacio disponible.

    Intente declarar algunas variables en el nivel de módulo en su lugar. También puede declarar todas las variables en el procedimiento estático si van precedidos de la palabra clave Property, Sub o Function con Static. También puede usar la instrucción Static para declarar variables Static individuales dentro de los procedimientos.

  • Tiene demasiadas cadenas de longitud fija. Las cadenas de longitud fija en un procedimiento tienen un acceso más rápido, pero usan más espacio de pila que las cadenas de longitud variable, porque los propios datos de cadena se colocan en la pila. Intente volver a definir algunas de las cadenas de longitud fija como cadenas de longitud variable. Al declarar cadenas de longitud variable en un procedimiento, solo se coloca el descriptor de cadena (no los datos en sí) en la pila. También puede definir la cadena a nivel de módulo, donde no requiere espacio de pila. Las variables declaradas en el nivel de módulo son Públicas de forma predeterminada, por lo que la cadena es visible para todos los procedimientos del módulo.

  • Tiene demasiadas llamadas a la función DoEvents. Use el cuadro de diálogo Llamadas para ver los procedimientos que continúan activos en la pila.

  • El código ha desencadenado una cascada de eventos. Una cascada de eventos se produce al desencadenar un evento que llama a un procedimiento de evento que ya está en la pila. Una cascada de eventos es similar a una llamada a un procedimiento recursivo no terminado, aunque no resulta tan obvia, porque la llamada se realiza desde Visual Basic y no aparece en el código de forma explícita. Use el cuadro de diálogo Llamadas para ver los procedimientos que continúan activos (en la pila).

Para mostrar el cuadro de diálogo Llamadas , seleccione el botón Llamadas situado a la derecha del cuadro Procedimiento de la ventana Depurar o elija el comando Llamadas . Para más información, seleccione el elemento en cuestión y presione F1 (en Windows) o AYUDA (en Macintosh).

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.