2008-12-08 21 views
119

Afortunadamente una pregunta fácil, pero me gustaría bastante una respuesta técnica a esto!¿Qué hace realmente la palabra clave Set en VBA?

¿Cuál es la diferencia entre:

i = 4 

y

Set i = 4 

en VBA? Sé que este último lanzará un error, pero no entiendo completamente por qué.

+2

Antecedentes aquí: http://stackoverflow.com/a/9924325/17034 –

Respuesta

79

set se utiliza 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) 
+4

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

+7

No es lo mismo, no. Pero lo suficientemente cerca como para que yo pueda entender el concepto. – Treb

+0

@Tomalak: podría usar VarPtr() – Atmocreations

8

El conjunto se usa para configurar referencias de objetos, en lugar de asignar un valor.

62

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

Set asigna una referencia de objeto. Para todas las demás tareas del (implícito, opcionales y poco utilizado) Let afirmación 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) 
39

De MSDN:

conjunto de palabras clave: En VBA, la palabra clave Set es necesario para distinguir entre la asignación de un objeto y la asignación de la propiedad predeterminada del objeto. Dado que las propiedades predeterminadas no son admitidas en Visual Basic .NET, la palabra clave Set no es necesaria y no es compatible con .

+0

Bien encontrado, pero un enlace al artículo que encontró en MSDN sería aún mejor :) –

+0

@Neil - el enlace está allí si hace clic MSDN en mi publicación. – Galwegian

+1

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

1

En la parte superior de mi cabeza, Set se utiliza para asignar objetos COM a las variables. Al hacer un Set, sospecho que bajo el capó está haciendo una llamada AddRef() al objeto para administrar su vida.

+1

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

-1

El conjunto es una palabra clave y se utiliza para asignar una referencia a un objeto en VBA.

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

Dim WS como hoja de trabajo

establecido Ws = ActiveWorkbook.Worksheets ("Sheet1")

WS.Name = "Amit"

0

Así que cuando se desea establecer un valor, usted don' Necesito "Establecer"; de lo contrario, si se refiere a un objeto, p. hoja de trabajo/rango, etc., necesita usar "Establecer".

Cuestiones relacionadas