web-dev-qa-db-fra.com

Quelle est la difference entre dim et set in vba

Pardonnez-moi car je suis un débutant dans VBA. 

Parfois j'utilise

Dim r as Range
r = Range("A1")

D'autres fois que j'utilise

Set r = Range("A1")

Quelle est la différence? Et quand devrais-je utiliser quoi?

65
Ram

Il n'y a aucune raison d'utiliser set à moins de faire référence à une référence d'objet. C'est une bonne pratique de ne l'utiliser que dans ce contexte. Pour tous les autres types de données simples, utilisez simplement un opérateur d’affectation. Cependant, il est judicieux de dim (dimension) TOUTES les variables:

Des exemples de types de données simples seraient integer, long, boolean, string. Ce ne sont que des types de données et n'ont pas leurs propres méthodes et propriétés.

Dim i as Integer
i = 5

Dim myWord as String
myWord = "Whatever I want"

Un exemple de object serait une Range, une Worksheet ou une Workbook. Ceux-ci ont leurs propres méthodes et propriétés. 

Dim myRange as Range
Set myRange = Sheet1.Range("A1")

Si vous essayez d'utiliser la dernière ligne sans Set, VB émettra une erreur. Maintenant que vous avez déclaré une object, vous pouvez accéder à ses propriétés et méthodes.

myString = myRange.Value
64
Michael

Dim: vous définissez une variable (ici: r est une variable de type Range)

Set: vous définissez la propriété (ici: définissez la valeur de r sur Range ("A1") - ce n'est pas un type, mais une valeur). 

Vous devez utiliser set avec des objets. Si r était un type simple (par exemple, int, chaîne de caractères), il vous suffirait d'écrire:

Dim r As Integer
r=5
7

Dim déclare simplement la valeur et le type.

Set attribue une valeur à la variable.

4
Justin Niessner

Si une variable est définie en tant qu’objet, par ex. Dim myfldr As Folder, une valeur est affectée à l’aide du mot clé "Set".

1
user2479175

Dim est l'abréviation de Dimension et est utilisé dans VBA et VB6 pour déclarer des variables locales.

Défini par contre, n'a rien à voir avec les déclarations de variables. Le mot clé Set est utilisé pour affecter une variable d'objet à un nouvel objet.

J'espère que cela clarifie la différence pour vous.

1
IqbalHamid

Selon l'aide de VBA sur l'instruction SET, il définit une référence à un objet. Ainsi, si vous modifiez une propriété, l'objet réel change également.

Dim newObj as Object
Set var1=Object1(same type as Object)
Set var2=Object1(same type as Object)
Set var3=Object1(same type as Object)
Set var4=Object1(same type as Object)
Var1.property1=NewPropertyValue

les autres propriétés de Vars changent aussi, donc:

Var1.property1=Var2.property1=Var3.property1=Var4.property1=Object1.Property1=NewpropertyValue`

en fait, tous les vars sont les mêmes!

0
Soroush