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.
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.
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.
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.
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.
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.