Patrones de codificación de VBA: mejora del rendimiento de VBA

En este artículo, veremos cómo mejorar el rendimiento de VBA.

En el artículo anterior, comparamos el método VBA Range Loop y confirmamos que el método que usa Variant Array es el más rápido.

Patrón de codificación VBA: bucle de rango - lectura


1. Variables globales de VBA relacionadas con el rendimiento

Aquí hay un resumen de todas las variables.

성능 관련 VBA 전역 변수
Variables globales de VBA relacionadas con el rendimiento

Examine el contenido de cada variable.

1.1. Aplicación.Actualización de pantalla

Es una variable que controla si la pantalla se actualiza o no, y el valor por defecto es True (la pantalla se actualiza).

  • Mejora del rendimiento al configurar que no se actualice la pantalla (conversión de archivos, conversión de hojas, configuración de valores de celda, etc.) durante la ejecución del código VBA
  • Eficaz cuando hay muchas actualizaciones de pantalla
  • Establézcalo en False al ingresar el código y vuelva a configurarlo en True al final del código.

1.2. Aplicación.DisplayAlerts

Una variable que controla si se muestra o no la ventana de advertencia, y el valor predeterminado es Verdadero (se muestra la ventana de alerta).

  • Evita que el código se detenga en el medio al no mostrar ventanas de advertencia (por ejemplo, la ventana "¿Desea guardar?" cuando intenta cerrar un archivo que ha cambiado) durante la ejecución del código VBA
  • Establézcalo en False al ingresar el código y vuelva a configurarlo en True al final del código.

1.3. Aplicación Cálculo

Esta es una variable que controla el método de cálculo de la fórmula y el valor predeterminado es xlCalculationAutomatic (cálculo automático).

  • Evite el cálculo automático de fórmulas (COUNTIF, VLOOKUP, etc.) durante la ejecución del código VBA
  • Eficaz para muchas fórmulas.
  • Establézcalo en xlCalculationManual al ingresar el código y vuelva a configurarlo en xlCalculationAutomatic al final del código

1.4. Aplicación EnableEvents

Es una variable que controla si se procesan los eventos y el valor predeterminado es True (se procesan los eventos).

  • Evitar la ejecución de código que maneja eventos como Worksheet_Change cuando ocurren
  • Esto es efectivo si tiene un código que maneja eventos.
  • Establézcalo en False al ingresar el código y vuelva a configurarlo en True al final del código.

2. Código de ejemplo

2.1. ¿Cuándo conviene aplicar?

Si el código VBA contiene los siguientes casos, es apropiado aplicar el método de mejora del rendimiento descrito en este artículo.

  • Al crear un nuevo archivo/hoja
  • Al cambiar la hoja actual a otra hoja
  • En caso de cambiar continuamente la celda actualmente seleccionada dentro de una hoja
  • Al realizar cálculos complejos, como cálculos largos con muchas fórmulas

En este caso, se suspende temporalmente la ejecución del código VBA y se procesan los eventos que requieren Excel, como actualizar la pantalla o calcular fórmulas. El ejemplo más típico de código VBA lento es la actualización de pantalla. Puede mejorar el rendimiento suspendiendo temporalmente el procesamiento de otros eventos mientras se ejecuta el código VBA y procesando otros eventos después de que el código VBA termine de ejecutarse.

2.2. código de ejemplo

Antes de ingresar el código a procesar, la variable global se establece en un valor de mejora del rendimiento y, una vez que finaliza el procesamiento del código, se cambia al valor original. Consulte el siguiente código.

'코드 진입 부분
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.DisplayAlerts = False
 
'실행할 코드가 들어 갈 부분
...
 
'코드 종료 부분
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.DisplayAlerts = True

Arriba, analizamos los patrones de codificación de VBA para mejorar el rendimiento. Si tiene alguna pregunta, por favor deje un comentario.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

es_ESEspañol