¿Hay alguna forma de limitar la cantidad de uso de CPU a la que Excel tiene acceso cuando se ejecuta? Tengo un script VBA que calcula un montón de fórmulas de matriz gigante. El cálculo completo lleva unos 20 minutos usando el 100% de mi CPU, pero no puedo usar mi máquina durante el tiempo y prefiero que se ejecute en segundo plano con un uso de CPU del 50% para poder continuar haciendo otras cosas. ¿Alguna sugerencia?
Mi sistema operativo es Windows 7 Enterprise de 64 bits y la versión de Excel es 2007-32 bit
windows-7
worksheet-function
microsoft-excel-2007
vba
learningAsIGo
fuente
fuente
Respuestas:
Si se llama a una función VBA desde varias fórmulas o si su secuencia de comandos genera o fuerza el recálculo de varias fórmulas, esto definitivamente debería hacer uso de la función de cálculo de subprocesos múltiples de Excel. Respectivamente, esto ejecutaría múltiples instancias de su función VBA para cada fórmula, o volvería a calcular varias celdas simultáneamente mientras su script vba se ejecuta en un solo hilo.
Puede limitar el número de hilos utilizados por Excel para recalcular fórmulas en Opciones de Excel ... Pestaña Avanzada ... sección Fórmulas.
fuente
En lugar de reducir la prioridad, intente cambiar la afinidad en el Administrador de tareas. Si tiene más de 1 CPU, puede limitar la cantidad de CPU que usará Excel. Esto liberará a las otras CPU para trabajar en otras cosas.
Haga clic con el botón derecho en Excel en la pestaña Procesos y seleccione Establecer afinidad. Elija CPU (s) donde desea que se ejecute Excel.
fuente
Puede intentar reducir la prioridad del proceso de Excel, abriendo el administrador de tareas, cambiando a la pestaña "Detalles" o "Procesos" (dependiendo de su versión de Windows), haciendo clic derecho en el proceso de excel.exe y seleccionando un menor prioridad Esto debería dar más tiempo de CPU a otros procesos.
fuente
Hay funciones de suspensión y espera disponibles en VBA o mediante una declaración. Sin embargo, la "regla general demasiado simplista" es nunca usar Sleep (). (google '"nunca use la programación sleep ()")
Página del documento para Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Tenga en cuenta que Dormir y esperar hará que Excel deje de responder durante el tiempo que especifique y esto puede causar "naufragios de trenes".
Si su cálculo implica un ciclo de algún tipo, entonces una forma de manejar esto para su propósito específico (perder el tiempo de cálculo para la disponibilidad de la CPU) es hacer una función especial de espera propia que, por ejemplo, haga bucles DoEvents () durante 1 segundo y Luego regresa.
DoEvents básicamente le dice a su código / intérprete que deje el tiempo para el sistema operativo, etc. Definitivamente hará que su código tarde más. También puede permitirle editar la hoja de trabajo mientras se realiza el cálculo, por lo que su kilometraje puede variar. Prueba.
Ver, por ejemplo, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba
fuente
Hace unos años se le preguntó a una búsqueda similar que tiene una solución: ¿existen soluciones que pueden limitar el uso de CPU de un proceso?
Process Tamer funciona para Windows 7. http://www.donationcoder.com/Software/Mouser/proctamer/
fuente
Tuve el mismo problema cuando mi computadora portátil tenía 4 GB de memoria. Tan pronto como lo actualicé a 16 GB, el problema se detuvo. Solo otra posible solución.
fuente
Agregue las siguientes 2 líneas en algún lugar cerca del comienzo de su macro:
Y estas 2 líneas cerca del final:
Entonces tendrá menos trabajo que hacer mientras haces otra cosa.
fuente
Si está utilizando una oficina de 32bi en un sistema operativo de 64 bits, debe usar esta aplicación: http://www.ntcore.com/4gb_patch.php
Esta aplicación permitirá que Excel o cualquier otra oficina de 32 bits use mo
fuente
Use OpenOffice o LibreOffice: su poder de scripting es mucho más efectivo que el de MS, y literalmente puede tener un "acelerador" en sus cálculos.
EDITAR: ¿Por qué votar a favor? eche un vistazo al manual y compruébelo usted mismo. Puede convertir sus cálculos a Java y estar bien con todo el poder de aceleración de la JVM, por ejemplo.
fuente