Grabar una macro no nos garantiza un código eficiente en Excel 2007

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áginaOrientació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

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Top WordPress Themes