Ejecutar grandes macros (Microsoft Excel)
Estuve hablando con un compañero de trabajo hace un tiempo y me describió un problema que tenía con una macro que se ejecutaba en un sistema informático muy potente.
Parece que la macro siempre falla y congela la máquina, siempre con un error de memoria insuficiente. Mi compañero de trabajo pensó que si la macro pudiera ejecutarse en segundo plano, no usaría tantos recursos y no fallaría.
Sin embargo, sabía que la solución propuesta no resolvería necesariamente el problema. Si bien podría liberar algunos recursos, el sistema eventualmente se quedaría sin memoria. ¿Por qué? Porque los problemas de falta de memoria suelen deberse a problemas de codificación en la macro original.
Las «pérdidas de memoria» (que conducen a la condición de falta de memoria) pueden ser causadas por cualquier número de problemas en el código de macro.
La mejor solución es una ronda de depuración nocturna, recorriendo el código macro y analizando dónde se está infiltrando el problema. Busque primero los problemas más obvios (pero que se pasan por alto fácilmente), como los bucles infinitos. Si la macro está haciendo mucho procesamiento repetitivo (recorriendo hojas de trabajo), asegúrese de liberar toda la memoria que declara para su macro. Por ejemplo, para cada declaración SET que use, debe tener una declaración correspondiente que establezca el objeto en NADA, y esas declaraciones deben estar dentro del ciclo.
Si puede recorrer las macros sin que fallen, entonces es muy probable que el problema radique en algún tipo de problema de sincronización en los subprocesos, un problema de sincronización que solo aparece, por supuesto, cuando la macro se está ejecutando al máximo en su propio. Si sospecha que este es el problema, entonces tal vez una nueva secuencia de los eventos en la macro pueda solucionarlo.
Si la macro usa DDE, debe tener en cuenta que Microsoft recomienda el uso de automatización OLE en lugar de DDE. Los problemas de tiempo son bastante comunes con DDE, y Microsoft ahora lo considera obsoleto y demasiado inestable para solucionarlo (lo que significa que no lo admitirán). En VBA, múltiples llamadas a una subrutina también pueden causar pérdidas de memoria, y dichas subrutinas deben reescribirse como funciones definidas por el usuario.
También debe asegurarse de que todas las referencias de variables estén completamente declaradas. He visto algunos informes de macros que se «confunden» entre las hojas de trabajo, e incluso si usa Alt + Tab para quitar el foco de Excel.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (2579) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.