image

El bloque With – End With en VBA se usa para decirle a VBA que vamos a usar el objeto dado y debe considerar las propiedades del objeto dado solo una vez que usemos el operador de punto. Veremos ejemplos más adelante en este artículo.

Sintaxis con – End With Block

With [Object]

'Code to alter or use [Object]

'--

'--

End With

Así que ahora que conocemos la sintaxis del bloque With – End With, veamos su uso.

Ejemplo de With – End With Block Digamos que quiero hacer varios cambios en el rango A2: A10. Quiero seleccionar este rango, cambiar sus colores de relleno, estilo de fuente, etc. ¿Cómo lo haría en general? Probablemente así:

Sub test()

Range("A1:A10").Select

Range("A1:A10").Interior.ColorIndex = 8

Range("A1:A10").Font.Name = "Algerian"

Range("A1:A10").Font.ColorIndex = 12

Range("A1:A10").Font.Underline = xlUnderlineStyleDouble

Range("A1:A10").Copy Range("B1:B10")

Range("A1:A10").Clear

End Sub

Lo anterior selecciona el rango A1: A10. Cambia el color interior del rango al índice de colores 8. Cambia la fuente a argelina. Cambia el color de la fuente al índice de color 12. Subraya el texto en el rango con subrayados dobles.

Luego copia el rango A1: A10 al rango B1: B10 de la misma hoja. Por fin borra el rango A1: A10.

Puede notar que para hacer todas las operaciones con el rango A1: A10, tenemos que escribirlo todo el tiempo. Luego, el operador de puntos accede a sus propiedades. Esto disminuye la velocidad de procesamiento y aumenta la sobrecarga de trabajo para los programadores de VBA. La alternativa para hacer esto es usar un bloque With: El código siguiente hace lo mismo que el código anterior pero más rápido.

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

.Font.Name = "Algerian"

.Font.ColorIndex = 12

.Font.Underline = xlUnderlineStyleDouble

.Copy Range("B1:B10")

.Clear

End With

End Sub

image

Veamos otro ejemplo.

Si ha creado un objeto de Outlook Mail, puede usar ese objeto para inicializar todas sus propiedades y usar métodos.

Set outMail = Outlook.Application.CreateItem(0)

With outMail

.To = "abcd.mail.com" 'Mandatory. Here you define the destination mail id.

.cc = "cc.mail.com" 'optional. Cc mail id if you want.

.BCC = "bcc.mail.com" 'optional. Bcc mail id if you want.

.Subject = subj 'should have. The massage on mail body.

.Body = msg 'optional. The massage on mail body.

.Attachments.Add "C:/exceltip.com\test.xlsx"

.Send

End With

¿Cómo funciona?

Bueno, cuando escribimos With Range («A1: A10»), vba bloquea su referencia al rango del objeto («A1: A10»). Entonces, cada vez que escribimos el operador de punto (.), VBA enumera todos los miembros de esta clase de rango que afectará solo al objeto Rango («A1: A10») o cualquier objeto que haya mencionado. El bloqueo de referencia se libera cuando VBA lee la instrucción End With.

Anidado con bloques Podemos tener un bloque dentro de otro bloque. En el ejemplo anterior usamos un objeto de rango para seleccionarlo. Luego usamos Range.Font varias veces para trabajar con fuentes. Esto es nuevamente repetitivo. El código anterior también se puede escribir así:

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

.Copy Range("B1:B10")

.Clear

End With

End Sub

El bloque interno con debe referirse a un objeto que es un miembro secundario del objeto externo. Podemos referirnos al externo con como objeto con y al interno con como Hijo con. Cuando comienzas con interior, el objeto debe escribirse con el operador de punto anterior.

Una vez que sea un niño, no podrá acceder a las propiedades específicas de los padres. Por ejemplo, el siguiente código es incorrecto.

Sub test()

With Range("A1:A10")

.Select

.Interior.ColorIndex = 8

'Using another With within a With Block

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

'The below code will generate error as copy and clear methods does not belong to font class.

.Copy Range("B1:B10")

.Clear

End With

End With

End Sub

Totalmente calificado con bloque Si quiero hacer algunos cambios con la fuente del rango A1: A10 de la hoja2 en el código que contiene el libro de trabajo, entonces deberíamos usar un bloque completamente calificado.

Los dos códigos siguientes funcionarán igual.

Sub test2()

With ThisWorkbook

With .Sheets("Sheet2")

With .Range("A1:A10")

With .Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End With

End With

End With

End Sub
'Fully qualified with block

Sub test3()

With ThisWorkbook.Sheets("Shee2").Range("A1:A10").Font

.Name = "Algerian"

.ColorIndex = 12

.Underline = xlUnderlineStyleDouble

End With

End Sub

Puedes ver la diferencia. Entonces, cuando sepa que va a utilizar múltiples métodos y propiedades de un objeto, dé un nombre completo al principio. Si va a utilizar objetos secundarios, utilice el enfoque anterior. Los programadores experimentados utilizan ambos métodos en situaciones adecuadas.

Así que sí, chicos, así es como usamos el bloque With – End With en VBA. Espero haber sido lo suficientemente explicativo y este artículo te haya ayudado a comprender el concepto de Con – Terminar con. Si tiene alguna duda con respecto a este artículo, o cualquier otro tema, pregúnteme en la sección de comentarios a continuación. Estaré feliz de poder ayudarte.

Artículos relacionados:

link: / general-topics-in-vba-vba-variables-in-excel [Variables de VBA en Excel] | * VBA significa Visual Basic para Aplicaciones.

Es un lenguaje de programación de Microsoft. Se utiliza con aplicaciones de Microsoft Office como MSExcel, MS-Word y MS-Access, mientras que las variables de VBA son palabras clave específicas.

link: / general-topics-in-vba-excel-vba-variable-scope [Excel VBA Variable Scope] | * En todos los lenguajes de programación, tenemos especificadores de acceso a variables que definen desde dónde se puede acceder a una variable definida. Excel VBA no es una excepción. VBA también tiene especificadores de alcance.

enlace: / celdas-rangos-filas-y-columnas-en-vba-cuál-es-la-diferencia-entre-byref-y-byval-argumentos-vba-entrevista-pregunta [ByRef y ByVal Argumentos] | Cuando se pasa un argumento como argumento ByRef a una función o sub diferente, se envía la referencia de la variable real. Cualquier cambio realizado en la copia de la variable se reflejará en el argumento original.

link: / files-workbook-and-worksheets-in-vba-delete-sheets-without-confirm-prompts-using-vba-in-microsoft-excel [Eliminar hojas sin mensajes de confirmación usando VBA en Microsoft Excel] | Dado que está eliminando hojas usando VBA, sabe lo que está haciendo.

Le gustaría decirle a Excel que no muestre esta advertencia y elimine la maldita hoja.

link: / files-workbook-and-worksheets-in-vba-add-and-save-new-workbook-using-vba-in-microsoft-excel [Add and Save New Workbook Using VBA In Microsoft Excel 2016] | En este código, primero creamos una referencia a un objeto de libro de trabajo. Y luego lo inicializamos con un nuevo objeto de libro de trabajo. El beneficio de este enfoque es que puede realizar operaciones en este nuevo libro de trabajo fácilmente. Como guardar, cerrar, eliminar, etc `link: / menus-toolbars-status-bar-in-vba-display-a-message-on-the-statusbar-using-vba-in-microsoft-excel [Display A Message On La barra de estado de Excel VBA *] `| La barra de estado en Excel se puede utilizar como monitor de código. Cuando su código VBA es extenso y realiza varias tareas usando VBA, a menudo deshabilita la actualización de la pantalla para que no vea que la pantalla parpadea.

link: / general-topics-in-vba-turn-off-warning-messages-using-vba-in-microsoft-excel [Desactivar mensajes de advertencia usando VBA en Microsoft Excel 2016] | * Este código no solo deshabilita VBA alertas, sino que también aumenta la eficiencia del tiempo del código. Veamos cómo.

Artículos populares:

link: / keyboard-formula-shortcuts-50-excel-shortcuts-to-incrementa-your-productividad [50 accesos directos de Excel para aumentar su productividad] | Acelera tu tarea. Estos 50 atajos le permitirán trabajar aún más rápido en Excel.

link: / fórmulas-y-funciones-introducción-de-vlookup-function [La función VLOOKUP en Excel] | Esta es una de las funciones más utilizadas y populares de Excel que se utiliza para buscar valores de diferentes rangos y hojas. enlace: / tips-countif-in-microsoft-excel [COUNTIF en Excel 2016] | Cuente valores con condiciones usando esta asombrosa función. No necesita filtrar sus datos para contar valores específicos.

La función Countif es esencial para preparar su tablero.

link: / excel-formula-and-function-excel-sumif-function [Cómo utilizar la función SUMIF en Excel] | Esta es otra función esencial del tablero. Esto le ayuda a resumir valores en condiciones específicas.