visual variable valor una refrescar para objetos lista hoja ejemplos ejemplo crear codigos codigo clase celda asignar vba variable-assignment

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



lista de objetos vba excel (7)

Esperemos que sea una pregunta fácil, pero me gustaría una respuesta técnica a esto.

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é.


Desde 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. Dado que las propiedades predeterminadas no son compatibles con Visual Basic .NET, la palabra clave Establecer no es necesaria y ya no es compatible.


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


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

Set asigna una referencia de objeto. Para todas las demás asignaciones, la instrucción de Let (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)


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


Fuera 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.


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

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

Dim WS WS Worksheet

Establecer WS = ActiveWorkbook.Worksheets ("Sheet1")

WS.Name = "Amit"


set se 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)