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.
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)
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)
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.
Set est utilisé pour définir des références d'objet, par opposition à l'attribution d'une valeur.
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.
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".