¿Qué hace realmente la palabra clave Set en VBA?


Respuestas:


95

setse usa para asignar una referencia a un objeto. El equivalente en C sería

 int i;
int* ref_i;

i = 4; // Assigning a value (in VBA: i = 4)
ref_i = &i; //assigning a reference (in VBA: set ref_i = i)

55
Una referencia de objeto VB no es lo mismo que un puntero en C. Y no hay equivalente de "& i" en VB.
Tomalak

10
No exactamente lo mismo, no. Pero lo suficientemente cerca como para entender el concepto.
Treb

@Tomalak: Puedes usar VarPtr ()
Atmocreations

Esta no es una buena analogía. Tome este ejemplo ( VBA on the left | C on the right): Dim A, B As Range | Range A, B;. Seguir su analogía A = B | A = B;sería correcto (y estaría en C), pero en Set A = B | A = &B;realidad es correcto en VBA (y fallaría en C). ¡En VBA, A = By Set A = Bson AMBOS equivalentes a C A = B;! La distinción ocurre en otro lugar.
Niko O

77

En su caso, producirá un error. :-)

Setasigna una referencia de objeto. Para todas las demás asignaciones, la Letdeclaración (implícita, opcional y poco utilizada) es correcta:

Set object = New SomeObject
Set object = FunctionReturningAnObjectRef(SomeArgument)

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)

44

De MSDN :

Establecer palabra clave: en VBA, la palabra clave Establecer es necesaria para distinguir entre la asignación de un objeto y la asignación de la propiedad predeterminada del objeto. Como las propiedades predeterminadas no son compatibles con Visual Basic .NET, la palabra clave Set no es necesaria y ya no es compatible.


Bien encontrado, pero un enlace al artículo que encontraste en MSDN sería aún mejor :)
Neil Barnwell

1
@Neil: el enlace está ahí si haces clic en MSDN en mi publicación.
Galuego

2
Al copiar el MSDN, al menos el artículo correcto. Este se refiere a VB.NET, no a VBA.
Tomalak

1
OP pregunta acerca de VBA, y aunque la información sobre Set ya no es necesaria para usar en .NET es útil, es un tema fuera de lugar y no es útil para las personas que llegan aquí con el Object variable or With block variable not seterror de VBA :)
AJP

77
Muchas gracias por el extracto de MSDN. Todas las demás respuestas, incluso la aceptada están perdiendo el punto. 'set' tiene que ver con la PROPIEDAD POR DEFECTO. Solo lea stackoverflow.com/a/9924325/717732
quetzalcoatl

10

Set se usa para establecer referencias de objeto, en lugar de asignar un valor.


1

Fuera de mi cabeza, Set se usa para asignar objetos COM a variables. Al hacer un Set, sospecho que debajo del capó está haciendo una llamada AddRef () en el objeto para administrar su vida útil.


1
No solo se usa para objetos COM, sino para todos los objetos. La razón principal por la que usa SET es explicada por Galwegian.
Ikke

0

Entonces, cuando desea establecer un valor, no necesita "Establecer"; de lo contrario, si se refiere a un objeto, por ejemplo, hoja de trabajo / rango, etc., necesita usar "Establecer".


-1

Set es una palabra clave y se usa para asignar una referencia a un objeto en VBA.

Por ejemplo, * El siguiente ejemplo muestra cómo usar Set en VBA.

Dim WS como hoja de trabajo

Establecer WS = ActiveWorkbook.Worksheets ("Sheet1")

WS.Name = "Amit"

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.