que metodo macro destination excel vba

metodo - Excel 2013 falla, debido a la fragmentación de la memoria



selection autofill (2)

Desde que actualizamos a nuestros usuarios de Excel 2007 a Excel 2013 de 32 bits, nuestra empresa se ha enfrentado a una montaña de problemas de rendimiento y estabilidad.

Hemos tenido que deshabilitar la aceleración de hardware para algunos usuarios, cambiar la configuración en el Panel de control / Facilidad de acceso al centro e incluso actualizar los controladores de gráficos Intel para mejorar la estabilidad, todo con distintos niveles de éxito.

Pero un problema que no podemos evitar es este:

La versión de 32 bits de Excel 2013 parece usar su propio administrador de memoria para mapear desde la memoria de 32 bits a la memoria de 64 bits utilizada por Windows 7.

El problema es que cuando esta memoria se fragmente demasiado , Excel 2013 se bloqueará por completo.

A veces, después de solo una hora de uso, hemos visto que Excel 2013 intenta buscar un bloque de XX''Mb de memoria, y si no puede encontrar un bloque contiguo de memoria de este tamaño, se bloqueará.

Como compañía financiera, tenemos muchos códigos VBA heredados en estos archivos de Excel, y pasar a Excel 2013 de 64 bits podría ocasionar aún más problemas.

Entonces, ¿alguien tiene alguna idea de cómo solucionar los problemas de memoria con Excel 2013 ..?

Actualizar

Algunos lectores (comprensiblemente) han preguntado por qué no hemos instalado la versión de 64 bits de Excel 2013, especialmente porque estamos ejecutando Windows 7 de 64 bits.

La razón, para citar a Microsoft, es la compatibilidad .

Ediciones de 64 bits de Office 2013

"Recomendamos la versión de 32 bits de Office para la mayoría de los usuarios, porque es más compatible con la mayoría de las otras aplicaciones, especialmente los complementos de terceros. Esta es la razón por la cual la versión de 32 bits de Office 2013 está instalada de manera predeterminada, incluso en 64 -bit sistemas operativos Windows ".

Nuestros usuarios no quieren campanas, silbidos o animaciones funky. Quieren algo que sea estable, incluso con sus archivos de Excel y VBA, que fue escrito hace 10 años. Parte de este código incluso usa motores de cálculo FORTRAN .dll, bibliotecas DAO, etc.

Y desde un punto de vista de soporte de TI, solo queremos una versión de Excel que aún sea compatible con Microsoft.

Por eso estamos usando Excel 2013 de 32 bits por ahora.

La pregunta es, este es un problema desagradable con Excel 2013 de 32 bits, la mayoría de las compañías financieras todavía ofrecen mucho en aplicaciones heredadas de Excel / Access ... ¿Qué podemos hacer para que este entorno sea más estable?


"El cambio es inevitable, y aquellos que se adaptan más rápidamente son los más propensos a sobrevivir". -Dr. Larry Fleinhardt (Numb3rs)

Una vez que se queda sin memoria direccionable, ya está hecho, ya sea debido a fugas de memoria o limitaciones de uso. Si crees que hay un problema como una pérdida de memoria, deberás llevarlo a cabo con Microsoft, un ticket de soporte costoso es en el futuro. Pueden arreglarlo, pero usted está yendo por la ruta costosa para mantener un sistema que se está rompiendo y / o que no satisface sus necesidades.

Si cree que su mejor solución implica mantener el código anterior, cambie a Excel de 64 bits. Esto hace 2 cosas. Le proporciona una memoria direccionable más grande para trabajar, lo que le da una patada en el camino para problemas de memoria. También tiene el valor agregado de cambiar partes del programa que podrían solucionar cualquier problema que tenga debido a fugas de memoria. Existen otras opciones, como OpenOffice / LibreOffice con integración de VBA (su millaje puede variar).

Sugiero aprender un lenguaje de programación, Python, que tenga módulos de Excel como Pandas. Es una solución poderosa, pero lleva tiempo usarla, pero a largo plazo obtiene más valor.


También me he enfrentado a este problema en mi proyecto, pero como he manejado el código con la palabra clave doevents y puse el código administrado de memoria apropiado como al final de la función y los procedimientos, borro las variables y luego pongo doevents para que sea 90 % menos crash.