web-dev-qa-db-fra.com

Que fait réellement le mot clé Set dans VBA?

J'espère que c'est une question facile, mais j'aimerais plutôt une réponse technique à cette question!

Quelle est la différence entre:

i = 4

et

Set i = 4

dans VBA? Je sais que ce dernier commettra une erreur, mais je ne comprends pas très bien pourquoi.

146
Jon Artus

set est utilisé pour affecter une référence à un objet. L'équivalent C serait

 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)
94
Treb

Dans votre cas, cela produira une erreur. :-)

Set assigne une référence à un objet. Pour toutes les autres affectations, l'instruction Let (implicite, facultative et peu utilisée) est correcte:

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

Let i = 0
Let i = FunctionReturningAValue(SomeArgument)

' or, more commonly '

i = 0
i = FunctionReturningAValue(SomeArgument)
75
Tomalak

De MSDN :

Mot clé Set: Dans VBA, le mot clé Set est nécessaire pour faire la distinction entre l'attribution d'un objet et l'attribution de la propriété par défaut de l'objet. Les propriétés par défaut n'étant pas prises en charge dans Visual Basic .NET, le mot clé Set n'est pas nécessaire et n'est plus pris en charge.

43
Galwegian

Set est utilisé pour définir des références d'objet, par opposition à l'attribution d'une valeur.

10
LeppyR64

De mémoire, Set est utilisé pour affecter des objets COM à des variables. En faisant un Set, je soupçonne que sous le capot, il effectue un appel AddRef () sur l'objet pour gérer sa durée de vie.

1
Sean

Ainsi, lorsque vous souhaitez définir une valeur, vous n'avez pas besoin de "Définir"; sinon, si vous vous référez à un objet, par ex. feuille de calcul/plage, etc., vous devez utiliser "Définir".

0
Eric Wang