5 Tips para mejorar tus macros en Excel VBA

5 tips para mejorar tus macros en Excel VBA

Photo by Ali Yahya on Unsplash

Llevo muchos años realizando macros en Excel y constantemente estoy aprendiendo cosas nuevas. El lenguaje VBA, aunque lleva muchos años sin ser actualizado, todavía tiene mucho que ofrecernos. Para ser sincero, creo que aún le restan muchos años antes de pensar en ser reemplazado por otro lenguaje para Office. ¿JavaScript?

En este artículo voy a compartirte 5 maneras de mejorar tus macros en Excel, aunque puedes llamarlos Tips o trucos. Son propiedades que uso constantemente en mis macros, así que no dudes en seguir leyendo, además de ver el Video.

Ver video 5 Tips para mejorar tus macros en Excel

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

1. Desactivar el parpadeo de pantalla al ejecutar una macro

Seguramente te has topado con macros que realizan muchas acciones en un archivo, incluso ves paso a paso lo que la macro hace. Aunque no siempre lo correcto es ver todo el movimiento que realiza una macro. Tal vez sólo necesitas presionar un botón y acto seguido se muestre el resultado final de la macro.

En VBA existe la propiedad Application.ScreenUpdating que nos permitirá desactivar temporalmente la actualización de pantalla, es decir, podemos asignar el valor de False par desactivar la actualización de pantalla, correr la macro y al final asignar el valor de True para activar la actualización de pantalla, con el beneficio que nos ahorramos mirar todo el alboroto que la macro pudo haber hecho.

Desactivar actualización de pantalla al ejecutar macros VBA en Excel

Figura 1. Desactivar actualización de pantalla al ejecutar macros VBA en Excel

La siguiente macro fue generada por la Grabadora de macros y la puedes ejecutar en el archivo que te adjunto al final del artículo.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Sub Macro1()

Application.ScreenUpdating = False

    Rows("1:2").Select
    Selection.Delete Shift:=xlUp
    Range("A:A,C:C,F:F,I:I,L:L,O:O").Select
    Range("O1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.End(xlToLeft).Select
    Selection.End(xlUp).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Font.Bold = True
    Selection.Columns.AutoFit

Application.ScreenUpdating = True

End Sub

2. Preguntar al usuario final si desea ejecutar una macro

Una de las cosas que más molestan es que al ejecutar una macro, simplemente realice una acción sin antes pedir confirmación. Lo anterior puede parecer exagerado, pero no creo que sea así. Mi recomendación es que siempre que desarrolles una macro que realizará algún movimiento importante, le des la oportunidad al usuario final de decidir si desea ejecutar o no la macro.

Es recomendable preguntar si se desea continuar con la ejecución de la macro.

Figura 2. Es recomendable preguntar si se desea continuar con la ejecución de la macro.

El siguiente código VBA muestra un mensaje de confirmación al usuario donde le pide confirmar si desea continuar con la ejecución de la macro.

Pregunta = MsgBox("Deseas ejecutar la macro", vbYesNo + vbQuestion)
If Pregunta = vbNo Then Exit Sub

3. Mostrar mensaje personalizado en la Barra de estado

La Barra de estado en Excel y en cualquier aplicación es la barra inferior donde regularmente se muestran mensajes al usuario. Con el lenguaje VBA podemos hacer uso de la Barra de estado en Excel y el cualquier aplicación de Office. Podemos mostrar mensajes donde le indiquemos a los usuarios que estamos realizando un procedimiento, o incluso puedes mostrar mensajes dinámicos para mostrar el avance de una macro.

En VBA podemos usar la propiedad Application.StatusBar para mostrar mensajes.

Podemos mostrar mensajes personalizados en la Barra de estado en Excel.

Figura 3. Podemos mostrar mensajes personalizados en la Barra de estado en Excel.

La siguiente macro VBA muestra un mensaje en la Barra de estado, mientras se ejecuta una macro sencilla. Al finalizar la macro, el mensaje se borra.

Sub BarradeEstado()

Application.StatusBar = "Ejecutando la macro..."

For i = 1 To 1000

    ActiveCell.Value = i
    ActiveCell.Offset(1, 0).Select

Next i

Application.StatusBar = False

End Sub

4. Activar el Cálculo manual para que las macros sean más rápidas

Este Tip te será útil si tienes macros que ingresan fórmulas en Excel. Al desactivar el cálculo automático ahorramos tiempo evitando que las celdas se calculen en cada movimiento de la macro. Si activamos el cálculo manual, una macro puede ingresar fórmulas en la celdas, pero no calculará su valor. La macro puede seguir realizando acciones y al finalizar su ejecución activar el cálculo automático.

Veremos una macro que inserta fórmulas en un rango de celdas. Usaremos la propiedad Application.Calculation para asignar el mensaje. Primero veremos que la macro dura 6.6 segundos con el cálculo automático activo. Al activar el cálculo manual al inicio, la macro ahora dura 4.2 segundos.

A la izquierda, activando el cálculo manual y a la derecha con el cálculo automático activado.

Figura 4. A la izquierda, activando el cálculo manual y a la derecha con el cálculo automático activado.

La siguiente macro VBA prueba que si activamos el cálculo manual antes de correr la macro, podemos ganar segundos de tiempo.

Sub Formulas()

Dim TiempoInicial As Double
Dim Segundos As Double

Application.Calculation = xlCalculationManual

TiempoInicial = VBA.Timer

For i = 1 To 2000

    ActiveCell.FormulaLocal = "=ALEATORIO.ENTRE(100,1000)"
    ActiveCell.Offset(1, 0).Select

Next i

Segundos = Round(VBA.Timer - TiempoInicial, 2)
MsgBox "Segundos: " & Segundos & vbInformation

Application.Calculation = xlCalculationAutomatic

End Sub

Tal vez te interese: Los resultados de las fórmulas no se actualizan en Excel cuando modifico datos.

5. Desactivar alertas y mensajes de Excel

Es muy importante que comprendas este Tip. Primeramente tienes que saber que Excel constantemente nos envía mensajes o alertas cuando ejecutamos alguna herramienta. Si ejecutamos una macro que realiza una acción que normalmente Excel nos enviaría una alerta, igual se enviará esa alerta al ejecutar una macro.

Has de preguntarte. En qué momentos decido si desactivo las alertas de Excel. Por ejemplo, cuando deseamos cerrar un archivo sin preguntar si deseamos guardar cambios o cuando eliminamos una hoja. Son acciones que regularmente Excel nos enviará un mensaje de alerta. Entonces, si deseas ejecutar una macro sin ningún tipo de alerta por parte de Excel, podemos utilizar la propiedad Application.DisplayAlerts para desactivarlas.

Importante: Siempre que desactives una propiedad, debes volver a activar al finalizar la macro.

La siguiente macro desactiva la alertas en Excel, elimina una hoja y vuelve a activar las alertas.

Sub Alertas()

Application.DisplayAlerts = False

Sheets("Hoja5").Delete

Application.DisplayAlerts = True

End Sub

Extra Tip

Si eres de los que, como yo, hacemos varias pruebas con las propiedades anteriores, te recomiendo instalar EXCELeINFO add-in y ejecutar la herramienta Desarrollador VBA > Restablecer configuraciones.

La macro anterior regresa a su estado original todas las propiedades expuestas en este artículo.

Usa EXCELeINFO add-in para restablecer propiedades en Excel.

Figura 5. Usa EXCELeINFO add-in para restablecer propiedades en Excel.

Descarga el archivo de ejemplo

5 tips para mejorar tus macros en Excel VBA.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

You may also like...