Curso Excel VBA y Macros – Cap. 18 – Instrucción With…End With para facilicitar nuestro código

<<CURSO COMPLETO EN YOUTUBE>>

La instrucción With…End With nos ayudará a ser más eficientes al momento de escribir código VBA, ya que nos permite hacer referencia a un objeto y luego podemos manipular sus propiedades, pero sin tener que escribir de nuevo toda la referencia al objeto.

With-End With ejecuta una serie de instrucciones que hacen referencia de manera repetitiva a un mismo objeto.

Ver video Capítulo 18 Excel VBA & Macros

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

Por qué debo usar With End With

Existen varias razones por las que es recomendable utilizar la instrucción en nuestras macros:

  • Ejecutar código VBA más rápido.
  • Simplificar la lectura de nuestras macros
  • Escribir menos código a evitar escribir la misma referencia a un objeto.

Sintaxis de la instrucción With…End With

La sintaxis de esta instrucción es sencilla, pero a su vez, y como lo vimos anteriormente, nos facilitará mucho la escritura o codificación de nuestras macros.

With ReferenciaObjeto

[ intrucciones ]

End With

Donde:

  • With. Es el inicio de la estructura.
  • ReferenciaObjeto. Esta referencia al un objeto realmente es una expresión que devolverá un objeto, y puede ser tan compleja como deseemos.
  • Instrucciones. De manera opcional podemos manejas varias sentencias o instrucciones y escribir o leer propiedades y métodos de ReferenciaObjeto.
  • End With. Es el cierre de la instrucción

La importancia del punto

Cuando usamos una expresión o la referencia a un objeto después de End With, si en la sección de instrucciones ingresamos solo el punto “.” Estaremos haciendo referencia al objeto en cuestión, solo que, en lugar de escribir toda la referencia, solo la escribimos una vez y luego solo usamos el punto.

Después de End With cualquier referencia a un objeto de deberá hacer de manera jerárquica.

Ejemplos de uso de With-End With

En esta macro le cambiaremos las propiedades de Nombre de fuente, tamaño de fuente y Negritas a un rango de celdas. Lo haremos de la manera tradicional, sin With End With.

Sub Intrucción_With()

ThisWorkbook.Sheets("Hoja1").Range("A3").CurrentRegion.Font.Name = "Calibri"
ThisWorkbook.Sheets("Hoja1").Range("A3").CurrentRegion.Font.Size = 20
ThisWorkbook.Sheets("Hoja1").Range("A3").CurrentRegion.Font.Bold = True

End Sub

Imaginemos que accedemos a más de 5 propiedades del rango anterior. Repetir la misma referencia en varias líneas, puede perjudicar al rendimiento de la macro, además de verse saturada.

En esta macro usamos With End With y vemos cómo el código se vuelve más legible y se ve claramente el bloque de la estructura.

Sub Intrucción_With2()

With ThisWorkbook.Sheets("Hoja1").Range("A3").CurrentRegion.Font
    .Name = "Calibri"
    .Size = 20
    .Bold = True
End With

End Sub

Ahora veremos una macro que hace lo mismo que las anteriores, pero haremos uso de una variable de objeto, asignando la propiedad CurrentRegion a la variable MiRango.

Sub Instrucción_With3()

Dim MiRango As Range
Set MiRango = ThisWorkbook.Sheets("Hoja1").Range("A3").CurrentRegion

With MiRango.Font
    .Name = "Calibri"
    .Size = 20
    .Bold = True
End With

End Sub

Y para repasar los temas de las Variables de objeto y las variables a nivel Módulo, en las siguientes dos macros realizaremos los siguiente:

  • Declaramos 3 variables a nivel Módulo.
  • Estas variables guardarán el formato inicial de un rango. Usamos Nombre, Tamanio y Negrita.
  • En la primera macro guardamos el formato actual en las variables y posteriormente le asignamos otro formato al rango.
  • En la segunda macro leeremos los valores guardados en las variables y los asignaremos de formato de las celdas, así vemos cómo se resetea el formato de las celdas.
Option Explicit

Dim Nombre As String
Dim Tamanio As Byte
Dim Negrita As Boolean

Sub Formato()

Dim MiRango As Range
Set MiRango = ThisWorkbook.Sheets("Hoja1").Range("A3").CurrentRegion

With MiRango.Font
    Nombre = .Name
    Tamanio = .Size
    Negrita = .Bold
End With

With MiRango.Font
    .Name = "Calibri"
    .Size = 20
    .Bold = True
End With

End Sub

Sub ResetearFormato()
Dim MiRango As Range
Set MiRango = ThisWorkbook.Sheets("Hoja1").Range("A3").CurrentRegion

With MiRango.Font
    .Name = Nombre
    .Size = Tamanio
    .Bold = Negrita
End With

End Sub

Descarga el archivo de ejemplo

018 – With End With.zip

<<CURSO COMPLETO EN YOUTUBE>>

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