Saltar al contenido

Cómo usar la instrucción With en VBA

unnamed 16 1 Cómo usar la instrucción With en VBA

Trabajando en un objeto

Como en cualquier otro idioma, todavía puede acaecer situaciones en VBA en las que estemos trabajando continuamente en un objeto específico. En esta ocasión vamos a entender como usar la instrucción whith en VBA

Por ejemplo, queremos aplicar formato condicional a una celda en función de la información cambiando la fuente, el color de la fuente, el color de fondo, el subrayado, la negrita o la cursiva, etc. Cuando se va a codificar esta bono, debemos usar un pedrusco de código donde cada segmento comience con:

Sheets(“<sheet name>”).cells( <row num> , <col num> ).

El pedrusco «with-terminando with»

La parte repetitiva del código, como se ve en el ejemplo antedicho, puede estar de moda una vez y hacerse global a todas las líneas del pedrusco usando el with–Terminar with pocas declaraciones.

Sintaxis

With <object expression>

[<block of code where each line starts with a period .>]

End With

Cierto

  1. El pedrusco de código/declaraciones entre las declaraciones «With» y «Terminar con» son completamente opcionales.
  2. <object expression> se puede elaborar como

<object name > [. <property name>][. <property name>][. <property name>]……

Ejemplo

Para desarrollar nuestro ejemplo antedicho, el código para formatear una celda sería:

Sub format_cell()
    Cells(20, 1).Interior.Pattern = xlSolid
    Cells(20, 1).Interior.PatternColorIndex = xlAutomatic
    Cells(20, 1).Interior.Color = 65535
    Cells(20, 1).Interior.TintAndShade = 0
    Cells(20, 1).Interior.PatternTintAndShade = 0
    Cells(20, 1).Font.ThemeColor = xlThemeColorAccent6
    Cells(20, 1).Font.TintAndShade = 0
    Cells(20, 1).Font.Bold = True
    Cells(20, 1).Font.Italic = True
    Cells(20, 1).Font.Underline = xlUnderlineStyleSingle
End Sub

Pero este código todavía se puede escribir como:

Sub format_cell_with()
With Cells(20, 1).Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
With Cells(20, 1).Font
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0
.Bold = True
.Italic = True
.Underline = xlUnderlineStyleSingle
End With
End Sub
ejemplo de la

Uso de «With-End» anidado con instrucciones

Una o más declaraciones «With» pueden ser: anidado adentro de otras declaraciones «With», según sus requisitos. Por ejemplo, la expresión de objeto de la confesión «with» externa debe ser parte de la expresión de objeto completa de la expresión de objeto de pedrusco «with» interna.

Aquí hay un ejemplo para ayudarlo a entender:

Formulario de legatario: formato de cuadro de texto

En este ejemplo, estableceremos las propiedades de un cuadro de texto específico utilizando el módulo de código VBA. Estas líneas se escriben en el método de «inicializar» del formulario de legatario para que los títulos de propiedad se establezcan cuando se carga el formulario.

Modelo de código VBA para establecer las propiedades de un cuadro de texto.
Líneas escritas en el formulario de usuario
Private Sub UserForm_Initialize()
    TextBox1.BorderStyle = fmBorderStyleSingle
    TextBox1.BackColor = yellow
    TextBox1.AutoSize = True
    TextBox1.BackStyle = fmBackStyleTransparent
    TextBox1.CanPaste = True
    TextBox1.Enabled = True
    TextBox1.Font.Bold = True
    TextBox1.Font.Italic = True
    TextBox1.Font.Size = 5
End Sub

Esto todavía se puede hacer fácilmente usando la confesión «With y Terminar With»:

Private Sub UserForm_Initialize()
 With TextBox1
    .BorderStyle = fmBorderStyleSingle
    .BackColor = yellow
    .AutoSize = True
    .BackStyle = fmBackStyleTransparent
    .CanPaste = True
    .Enabled = True
 End With
 With TextBox1.Font
    .Bold = True
    .Italic = True
    .Size = 5
    End With
End Sub
Establezca propiedades de cuadro de texto específicas con

Ahora todavía podemos escribir el mismo código usando un pedrusco «With» anidado.

En este caso, la expresión de objeto para el primero con pedrusco Textbox1 y la expresión de objeto para el segundo con pedrusco es Textbox1.Font† La expresión de objeto del primero es parte del segundo. Entonces podemos reescribir el código como:

Private Sub UserForm_Initialize()

 With TextBox1
    .BorderStyle = fmBorderStyleSingle
    .BackColor = yellow
    .AutoSize = True
    .BackStyle = fmBackStyleTransparent
    .CanPaste = True
    .Enabled = True
    With .Font
        .Bold = True
        .Italic = True
        .Size = 5
    End With
 End With
 
End Sub
Escribir código con anidado

Ambiente en tiempo verdadero: use la confesión «With» con la confesión «Si»

En este ejemplo, resaltaremos una celda en color naranja y cambiaremos las propiedades de la fuente si contiene la palabra «India».

Sub format_cell_with()
For i = 1 To 9
    For j = 1 To 4
    cellcontent = Cells(i, j).Value
    If InStr(cellcontent, "India") &amp;amp;gt; 0 Then
    With Cells(i, j).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent2
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
        
        With Cells(20, 1).Font
            .Bold = True
            .Italic = True
            .Underline = xlUnderlineStyleSingle
        End With
    End With
    End If
    Next
Next
End Sub
documento excel con

Inferencia

Esta confesión «With-End With» ayuda a organizar y estrechar la cantidad de caracteres en su código, lo que facilita su mantenimiento. Al mismo tiempo, puede ser difícil depurar los problemas con dicho código si hay demasiadas instrucciones en el pedrusco. Esto se debe a que podemos desplazarnos por la página para descubrir el código y nos resulta difícil comprender las expresiones de objeto asociadas con las declaraciones en ese pedrusco. Esto puede conducir a errores de tiempo de ejecución que nos hagan perder el tiempo.

En VBA, si queremos repasar el estado o las propiedades de un objeto en tiempo de ejecución, simplemente resaltamos la relato en el código y seleccionamos «añadir a la ventana gráfica» en el menú contextual para agregarlos a la ventana gráfica. Con relato a otros lenguajes como UFT que nos brindan: informador de objetos y marcar objeto característica, esta confesión «Con» puede ser un obstáculo, ya que necesitamos resaltar toda la segmento de código durante la depuración.

En prontuario, cuando se usa la confesión «With», puede volverse engorroso en tiempo de ejecución marcar la relato completa al objeto, aunque es posible.