Espero 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 arrojará un error, pero no entiendo completamente por qué.
Espero 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 arrojará un error, pero no entiendo completamente por qué.
Respuestas:
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)
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 = B
y Set A = B
son AMBOS equivalentes a C A = B;
! La distinción ocurre en otro lugar.
En su caso, producirá un error. :-)
Set
asigna una referencia de objeto. Para todas las demás asignaciones, la Let
declaració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)
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.
Object variable or With block variable not set
error de VBA :)
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.
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"