Colección de citas famosas - Slogan de motivación - Excel VBA funciona cada vez más lento, ¿cómo acelerarlo?

Excel VBA funciona cada vez más lento, ¿cómo acelerarlo?

Veo el problema. Cuando la cantidad de datos es grande, las operaciones de ocultación pueden resultar lentas. Hay dos formas de acelerar las cosas:

La primera es sencilla. Para el bucle i=11 ti h, la celda no se verifica, pero el contenido de la quinta columna se almacena primero en la matriz, verificando si debe estar oculto en la matriz. El algoritmo oculto también se ha optimizado, es decir, se juzga si está oculto en la variable X en función de si es igual, y luego se detecta si el estado de esa fila es el mismo que El código optimizado es el siguiente:

¿Opción? Explícito

¿Privado? ¿Sub? Worksheet_Change(ByVal?Target?As?Range)

¿Atenuado? s,? ¿h? I,? ah? x

¿Y si? Objetivo. ¿DIRECCIÓN? =?rango("P5"). ¿DIRECCIÓN? ¿Entonces? =?rango("P5"). Valor

h? =?Rango de uso. Número de filas. Contar

¿Si? (ciruela pasa)? =?"Todos"? ¿aún? ¿ciruela pasa? =?"")?Entonces

Filas("10:"?& amp?h). ¿esconder? =?Aplicación

Otra

incorrecta. ¿Actualización de pantalla? =?Error

arr? =?range(cell(1,5),?cell(h,?5))

¿Para qué? ¿I? =?11?¿Adónde ir? h

x? =?arr(I,?1)?& lt& gt? s

¿Y si? Fila(I). ¿esconder? <>? ¿incógnita? ¿Entonces qué? Fila(I). ¿esconder? =?x

Entonces

aplicar. ¿Actualización de pantalla? =?Real

¿Fin? Si

¿Finalizar? Si

¿Finalizar? El código anterior en Sub reduce el tiempo de recuperación a juzgar por la matriz. Verificar el estado antes de ocultar/mostrar la fila debería tener un cierto efecto y reducir el tiempo de procesamiento.

El código se puede optimizar aún más. La operación de escaneo progresivo para ocultar y mostrar todavía requiere mucho tiempo. La idea para una mayor optimización es procesar pieza por pieza. Por ejemplo, cuando solo es necesario mostrar unas pocas líneas (una línea extrema) de decenas de miles de líneas, solo es necesario ejecutarlo tres veces en condiciones óptimas: el primer párrafo está oculto, el párrafo central se muestra y el El último párrafo está oculto. De esta manera, se pueden mostrar decenas de miles de líneas. El número de operaciones de la interfaz de la tabla se reduce a tres y el efecto se mejora enormemente. Sin embargo, el código será muy largo y complicado. Utilizará una serie de variables para registrar si la línea actual debe ocultarse o mostrarse, pero no se procesará de inmediato y continuará juzgando si el procesamiento requerido es la siguiente línea; igual que el anterior, registrar el rango a procesar y continuar una línea de juicio si el procesamiento requerido es diferente al anterior, realizar la operación anterior y volver a registrar.