Aunque como hemos comentado, grabar una macro es la mejor manera de aprender VBA. Lo cierto es que no es garantía de obtener un código eficiente, ya que inserta código adicional relativo a parámetros que no utilizamos.
Veamos un ejemplo.
Vamos a grabar una macro. Esta vez en vez de hacerlo desde Grabar macro de la opción Macros, tal y como explicamos en una nota anterior
Vamos a hacerlo desde el icono Grabar macro situado en la barra de estado en la parte inferior de la pantalla
Aparecerá el cuadro de diálogo Grabar macro
- Ponemos el nombre que queramos. En nuestro caso dejamos el que aparece por defecto.
- Hacemos clic en Aceptar
Comenzamos a grabar una macro sencilla que le aplicará a la hoja de cálculo una orientación horizontal. En versiones anteriores esto se hacía desde el cuadro de diálogo Configurar página.
En Excel 2007 está bajo la ficha Diseño de página – Orientación - Horizontal, tal y como explicamos en una nota anterior
Hacemos clic en el botón situado en la barra de estado Detener grabación
Observamos como al acceder al editor VBA, bien desde el botón Modificar del cuadro de diálogo Macro, o bien pulsando Alt+F11
Aparece el código grabado
Sub Macro1()
'
' Macro1
'
'
With ActiveSheet.PageSetup.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.7)
.RightMargin = Application.InchesToPoints(0.7)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintNoComments
.PrintQuality = 600
.CenterHorizontally = False
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA4
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
.EvenPage.LeftHeader.Text = ""
.EvenPage.CenterHeader.Text = ""
.EvenPage.RightHeader.Text = ""
.EvenPage.LeftFooter.Text = ""
.EvenPage.CenterFooter.Text = ""
.EvenPage.RightFooter.Text = ""
.FirstPage.LeftHeader.Text = ""
.FirstPage.CenterHeader.Text = ""
.FirstPage.RightHeader.Text = ""
.FirstPage.LeftFooter.Text = ""
.FirstPage.CenterFooter.Text = ""
.FirstPage.RightFooter.Text = ""
End With
End Sub
Este código no es eficiente ya que la grabadora ha registrado parámetros por defecto que ni tan siquiera hemos utilizado en nuestra acción. Esto ocasiona una ralentización en la ejecución de la macro ya que Excel al ejecutarla ha de leer todo este código.
Podemos construir este código más simplificado de la siguiente manera
Código simplificado
Sub Macro1()
With Activesheet.PageSetup
.Orientation = xlLandscape
End Sub
E incluso podemos optmizarlo más eliminando la construcción With End With ya que no es necesaria si solo estamos cambiando una propiedad.
Sub Macro1()
ActiveSheet.PageSetup.Orientation = xlLandscape
End Sub
Por tanto, podemos comprobar como si borramos todo el código generado por la macro y escribimos este último, Excel ejecuta la misma acción de manera más eficiente.
0 comentarios:
Publicar un comentario