Excel VBA funciona cada vez más lento, ¿cómo acelerarlo?
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.