Hay funciones de reposo y espera disponibles en VBA o a través de una declaración. Sin embargo, la "regla general demasiado simplista" es no utilizar nunca Sleep(). (google '"never use sleep()" programming')
Página del documento Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Tenga en cuenta que Dormir y Esperar harán que Excel deje de responder durante la duración que usted especifique y esto puede causar "choques de trenes" en los cortes de tiempo.
Si su cálculo implica un bucle de algún tipo, entonces una manera 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, hace un bucle DoEvents() durante 1 segundo y luego regresa.
DoEvents básicamente le dice a tu código/intérprete que deje el tiempo para el SO, etc. Definitivamente causará que su código tome más tiempo. También puede permitirte editar la hoja de trabajo mientras el cálculo está en marcha, así que tu kilometraje puede variar. Prueba.
Véase, por ejemplo, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba
1 votos
¿Windows? ¿Qué versión?
0 votos
Windows 7. Lo añadiré al post
0 votos
Probablemente no es lo que quieres oír, pero la solución más fácil puede ser rediseñar tu código para que sea más eficiente. Si quieres hacer esa pregunta, aquí hay público para ello.
0 votos
Ciertamente es posible. El cuello de botella son 5 fórmulas de matriz que se ejecutan en ~1000 celdas cada una. Las fórmulas de matriz son intrínsecamente lentas, así que no sé si se puede ganar mucho rendimiento con una solución alternativa, pero puede que la publique en forma de pregunta más adelante.
8 votos
¿Conseguir una CPU multinúcleo? Si ya tienes una (¿quién no?) y Excel está usando todos los núcleos (cosa que no sabía que Excel podía hacer), entonces configura su afinidad en el Administrador de tareas.
0 votos
Tengo una CPU multi-núcleo y creo que está utilizando todos los núcleos ya que veo un 99-100% de uso de la CPU en el administrador de tareas. Le daré una oportunidad a lo de la afinidad de núcleos
2 votos
Esto no responde a la pregunta, pero asegúrate de desactivar las actualizaciones de ventanas antes de empezar a calcular y actualizar miles de celdas. Si tiene gráficos, desactívelos también. VBA es lento, pero cuando es realmente lento entonces suele ser culpa de uno de ellos o de ambos.
0 votos
¿Has comprobado si tu sistema tiene suficiente memoria? Si tienes una CPU multinúcleo y todo el sistema va lento, puede deberse a que esté intercambiando...
0 votos
@learningAsIGo 100% de uso de CPU significa que está usando el 100%. de un núcleo de los cuales probablemente tengas un total de 4 u 8 núcleos virtuales. El hecho de que esto haga que Windows sea inutilizable es desconcertante para mí; tal vez una prueba más de que Windows es realmente un montón de basura hinchada.
1 votos
@cat : No, un uso del 100% de la CPU en el Administrador de tareas de Windows significa el 100% en todos los procesadores lógicos. Si sólo un núcleo lleno será 25% (en un núcleo dual común con hyper threading) o ~36% (turbo boosting).
0 votos
Si es realmente Siempre puedes exportar los datos pertinentes en un formato como CSV, pasarlos por un programa compilado (FORTRAN o el lenguaje que mejor funcione) y volver a importar los resultados. Excel no es el único martillo que puedes usar en este clavo.