With...End With (Instrucción, Visual Basic)With...End With Statement (Visual Basic)

Ejecuta una serie de instrucciones que hacen referencia repetidamente a un único objeto o estructura, por lo que las instrucciones pueden utilizar una sintaxis simplificada al acceder a los miembros del objeto o estructura.Executes a series of statements that repeatedly refer to a single object or structure so that the statements can use a simplified syntax when accessing members of the object or structure. Cuando use una estructura, sola podrá leer los valores de los miembros o invocar métodos, y recibirá un error si intenta asignar valores a los miembros de una estructura utilizada en una instrucción With...End With.When using a structure, you can only read the values of members or invoke methods, and you get an error if you try to assign values to members of a structure used in a With...End With statement.

SintaxisSyntax

With objectExpression  
    [ statements ]  
End With  

ElementosParts

TérminoTerm DefiniciónDefinition
objectExpression Obligatorio.Required. Una expresión que se evalúa como un objeto.An expression that evaluates to an object. La expresión puede ser arbitrariamente compleja y se evalúa solo una vez.The expression may be arbitrarily complex and is evaluated only once. La expresión se puede evaluar como cualquier tipo de datos, incluidos los tipos elementales.The expression can evaluate to any data type, including elementary types.
statements Opcional.Optional. Una o varias instrucciones entre With y End With que pueden hacer referencia a los miembros de un objeto generado por la evaluación de objectExpression.One or more statements between With and End With that may refer to members of an object that's produced by the evaluation of objectExpression.
End With Obligatorio.Required. Termina la definición del bloque With.Terminates the definition of the With block.

ComentariosRemarks

Con With...End With, puede ejecutar una serie de instrucciones en un objeto especificado sin necesidad especificar el nombre del objeto varias veces.By using With...End With, you can perform a series of statements on a specified object without specifying the name of the object multiple times. En un bloque de instrucciones With, puede especificar un miembro del objeto que comience por un punto, como si el objeto de la instrucción With lo precediera.Within a With statement block, you can specify a member of the object starting with a period, as if the With statement object preceded it.

Por ejemplo, para cambiar varias propiedades de un único objeto, coloque las instrucciones de asignación de las propiedades dentro del bloque With...End With y haga referencia al objeto una vez, en lugar de hacerlo en cada una de las asignaciones de las propiedades.For example, to change multiple properties on a single object, place the property assignment statements inside the With...End With block, referring to the object only once instead of once for each property assignment.

Si el código tiene acceso al mismo objeto en varias instrucciones, la instrucción With le brinda las ventajas siguientes:If your code accesses the same object in multiple statements, you gain the following benefits by using the With statement:

  • No es necesario evaluar varias veces una expresión compleja ni asignar el resultado a una variable temporal para hacer referencia a sus miembros varias veces.You don't need to evaluate a complex expression multiple times or assign the result to a temporary variable to refer to its members multiple times.

  • El código resulta más legible al eliminar expresiones de calificación repetitivas.You make your code more readable by eliminating repetitive qualifying expressions.

El tipo de datos de objectExpression puede ser cualquier tipo de clase o estructura, o incluso un tipo elemental de Visual Basic, como Integer.The data type of objectExpression can be any class or structure type or even a Visual Basic elementary type such as Integer. Si objectExpression produce un valor que no es un objeto, solo podrá leer los valores de sus miembros o invocar métodos, y recibirá un error si intenta asignar valores a los miembros de una estructura utilizada en una instrucción With...End With.If objectExpression results in anything other than an object, you can only read the values of its members or invoke methods, and you get an error if you try to assign values to members of a structure used in a With...End With statement. Este es el mismo error que obtendría si invocara un método que devolviera una estructura y accediera inmediatamente a un miembro del resultado de la función, como GetAPoint().x = 1, y le asignara un valor.This is the same error you would get if you invoked a method that returned a structure and immediately accessed and assigned a value to a member of the function’s result, such as GetAPoint().x = 1. El problema en ambos casos es que la estructura solo existe en la pila de llamadas y no hay forma de que un miembro de la estructura modificada en estas situaciones pueda escribir en una ubicación de forma que cualquier otro código del programa pueda observar el cambio.The problem in both cases is that the structure exists only on the call stack, and there is no way a modified structure member in these situations can write to a location such that any other code in the program can observe the change.

`objectExpression\` se evalúa una vez, tras su entrada en el bloque.The `objectExpression` is evaluated once, upon entry into the block. No se puede reasignar `objectExpression` desde el interior del bloque `With`.You can't reassign the `objectExpression` from within the `With` block. En un bloque `With`, solo de puede acceder a los métodos y propiedades del objeto especificado sin calificarlos.Within a `With` block, you can access the methods and properties of only the specified object without qualifying them. Se pueden usar métodos y propiedades de otros objetos, pero es necesario calificarlos con los nombres de objeto.You can use methods and properties of other objects, but you must qualify them with their object names. Puede incluir una instrucción `With...End With` dentro de otra.You can place one `With...End With` statement within another. Las instrucciones `With...End With` anidadas pueden resultar confusas si los objetos a los que se hace referencia no están claros por el contexto.Nested `With...End With` statements may be confusing if the objects that are being referred to aren't clear from context. Debe proporcionar una referencia completa a un objeto que esté en un bloque `With` externo cuando se haga referencia al objeto desde dentro de un bloque `With` interno.You must provide a fully qualified reference to an object that's in an outer `With` block when the object is referenced from within an inner `With` block. No se pueden crear bifurcaciones en un bloque de instrucciones `With` desde fuera del bloque.You can't branch into a `With` statement block from outside the block. A menos que el bloque contenga un bucle, las instrucciones se ejecutan una sola vez.Unless the block contains a loop, the statements run only once. Puede anidar diferentes tipos de estructuras de control.You can nest different kinds of control structures. Para obtener más información, consulte [estructuras de Control anidadas](../../../visual-basic/programming-guide/language-features/control-flow/nested-control-structures.md).For more information, see [Nested Control Structures](../../../visual-basic/programming-guide/language-features/control-flow/nested-control-structures.md). > [!NOTE] > La palabra clave `With` también se puede usar en inicializadores de objeto.You can use the `With` keyword in object initializers also. Para obtener más información y ejemplos, vea [inicializadores de objeto: Tipos con nombre y anónimos](../../../visual-basic/programming-guide/language-features/objects-and-classes/object-initializers-named-and-anonymous-types.md) y [tipos anónimos](../../../visual-basic/programming-guide/language-features/objects-and-classes/anonymous-types.md).For more information and examples, see [Object Initializers: Named and Anonymous Types](../../../visual-basic/programming-guide/language-features/objects-and-classes/object-initializers-named-and-anonymous-types.md) and [Anonymous Types](../../../visual-basic/programming-guide/language-features/objects-and-classes/anonymous-types.md). > > Si usa un bloque `With` solo para inicializar las propiedades o campos de un objeto del que acaba de crear instancias, considere la posibilidad de utilizar en su lugar un inicializador de objetos.If you're using a `With` block only to initialize the properties or fields of an object that you've just instantiated, consider using an object initializer instead. ## EjemploExample En el ejemplo siguiente, cada bloque `With` ejecuta una serie de instrucciones en un único objeto.In the following example, each `With` block executes a series of statements on a single object. [!code-vb[VbVbalrWithStatement#2](~/samples/snippets/visualbasic/VS_Snippets_VBCSharp/vbvbalrwithstatement/vb/mainwindow.xaml.vb#2)] ## EjemploExample En el ejemplo siguiente se anidan las instrucciones `With…End With`.The following example nests `With…End With` statements. En la instrucción `With` anidada, la sintaxis hace referencia al objeto interno.Within the nested `With` statement, the syntax refers to the inner object. [!code-vb[VbVbalrWithStatement#1](~/samples/snippets/visualbasic/VS_Snippets_VBCSharp/vbvbalrwithstatement/vb/mainwindow.xaml.vb#1)] ## Vea tambiénSee also - - [Estructuras de control anidadasNested Control Structures](../../../visual-basic/programming-guide/language-features/control-flow/nested-control-structures.md) - [Inicializadores de objeto: Tipos con nombre y anónimosObject Initializers: Named and Anonymous Types](../../../visual-basic/programming-guide/language-features/objects-and-classes/object-initializers-named-and-anonymous-types.md) - [Tipos anónimosAnonymous Types](../../../visual-basic/programming-guide/language-features/objects-and-classes/anonymous-types.md)