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 - Finalizar con bloque
Con [Objeto] 'Código para modificar o usar [Objeto]' - '- Terminar con
Entonces, 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í:
Subprueba () Rango ("A1: A10"). Seleccione Rango ("A1: A10"). Interior.ColorIndex = 8 Rango ("A1: A10"). Font.Name = "Algerian" Rango ("A1: A10 ") .Font.ColorIndex = 12 Rango (" A1: A10 "). Font.Underline = xlUnderlineStyleDouble Range (" A1: A10 "). Copiar rango (" B1: B10 ") Rango (" A1: A10 "). Borrar End Sub
Lo anterior selecciona el rango A1: A10. Cambia el color interior de la gama al índice de color 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.
Subprueba () Con rango ("A1: A10") .Seleccione .Interior.ColorIndex = 8 .Font.Name = "Algerian" .Font.ColorIndex = 12 .Font.Underline = xlUnderlineStyleDouble .Copy Range ("B1: B10" ) .Clear End With End Sub
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" 'Obligatorio. Aquí se define la identificación del correo de destino… cc = "cc.mail.com" 'opcional. ID de correo CC si lo desea … BCC = "bcc.mail.com" 'opcional. ID de correo CCO si lo desea … Asunto = subj 'debería tener. El masaje en el cuerpo del correo… Body = msg 'opcional. El masaje en el cuerpo del correo … Archivos adjuntos.Agregue "C: /exceltip.com \ test.xlsx" .Enviar Terminar con
¿Como 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í:
Subprueba () con rango ("A1: A10") .Seleccione .Interior.ColorIndex = 8 'Usando otro With dentro de un bloque With Con .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With .Copy Rango ("B1: B10"). Borrar final con final secundario
El bloque interno con debe referirse a un objeto que es un submiembro 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.
Subprueba () Con rango ("A1: A10") .Seleccione .Interior.ColorIndex = 8 'Usando otro With dentro de un bloque With Con .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble' El siguiente código generará un error ya que los métodos de copiar y borrar no pertenecen a la clase de fuente … Copiar Rango ("B1: B10"). Borrar Fin con Fin con Fin Sub
Totalmente calificado con bloque
Si quiero hacer algunos cambios con la fuente del rango A1: A10 de sheet2 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 () Con ThisWorkbook Con .Sheets ("Sheet2") Con .Range ("A1: A10") Con .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With End With End With End With End Sub
'Totalmente calificado con el bloque Sub test3 () Con 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.
Variables de VBA en Excel| VBA son las siglas de 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.
Alcance variable de Excel VBA| 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.
Argumentos ByRef y ByVal | 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.
Elimine 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.
Agregar y guardar un nuevo libro de trabajo con VBA en 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, borrar, etc.
Mostrar un mensaje en 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.
Desactive los mensajes de advertencia con VBA en Microsoft Excel 2016| Este código no solo deshabilita las alertas de VBA, sino que también aumenta la eficiencia de tiempo del código. Veamos cómo.
Articulos populares:
50 accesos directos de Excel para aumentar su productividad | Acelera tu tarea. Estos 50 accesos directos le permitirán trabajar aún más rápido en Excel.
La función BUSCARV 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.
CONTAR.SI 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.
Cómo usar la función SUMIF en Excel | Esta es otra función esencial del tablero. Esto le ayuda a resumir valores en condiciones específicas.