De acuerdo.
He encontrado que cuando se apaga ScreenUpdating
, Calculation
, lo mejor es pensar en cómo hacer tanto trabajo (escribe, lee, eventos, ...) como sea posible para el menor número de llamadas ScreenUpdating
a cambio. Esto acelerará las operaciones y al mismo tiempo brindará al usuario una experiencia mejor y más tolerable. Digamos, por ejemplo, que desea escribir algunos datos en una hoja lo más rápido posible.Usted puede hacer esto:
For Each row In rowDic.Keys()
' turn off updating
for item in rowDic.Key(row)
... do some writes
Next
' turn on updating
Next
o para ir más rápido se puede hacer esto:
' turn off updating
For Each row In rowDic.Keys()
for item in rowDic.Key(row)
... do some writes
Next
Next
' turn on updating
Del mismo modo, al escribir los datos, es más rápida de escribir trozos más grandes, menos veces. por lo que la cantidad ideal de escrituras, si las hay, es una. Puede hacerlo tratando un Range
como 2D array[rows,cols]
. He encontrado las siguientes condiciones para ser eficaz:
' turn off updates
' Organise data in ram so that it fits the range for which it is meant
Dim two_d_arr (rows,cols)
loadDataFromSource two_d_arr
Dim destinationRange as Range
destinationRange = Sheets(someSheet).Range(someRange).Value = two_d_arr
Redim two_d_arr(0,0) ' !!! RELEASE MEMORY
' turn on updates
Aquí, no hay bucles, esto optimiza el tiempo de cada tarea individual en la CPU que se traduce en tiempos de procesamiento más rápido y, a su vez parece hacer el trabajo de Excel normalmente (no accidente)
HTH,
F
DisplayAlerts no está relacionada con la velocidad de ejecución del programa, se acaba de suprimir las advertencias de Excel por defecto (por ejemplo, el mensaje para confirmar las eliminaciones de hoja de cálculo), que puede o puede no querer suprimir. (Supongo que técnicamente lo hará funcionar más rápido ya que no habrá diálogos, pero ya sabes a qué me refiero). – goggin13