2013-07-30 3 views
1

Je suis juste essayer d'obtenir les règles directement dans la tête ...Placement des paramètres dans le code: méthodes vs propriétés

Par exemple, en utilisant une méthode (Ajouter) Je peux le faire:

Worksheets.Add After:=Worksheets(1) 

... mais l'utilisation suivante d'un bien (Resize) renvoie une erreur:

Selection.Resize.Select ColumnSize:=4 

ce n'est pas une grosse affaire, étant donné que ceci:

Selection.Resize(ColumnSize:=4).Select 

... ou d'autres façons de le faire fonctionner, mais j'essaie simplement de comprendre pourquoi il existe une règle officielle qui stipule que vous pouvez faire le post-placement d'un paramètre (disons vite!) avec une méthode mais vous ne pouvez pas avec une propriété.

(Je suis également un peu confus quant à pourquoi Resize est une propriété plutôt qu'une méthode, donc si quelqu'un connaît la réponse à ce que ce serait un bonus, mais je suppose que ce n'est pas si important).

Merci d'avance.

Répondre

4

Lorsque vous écrivez Selection.Resize.Select ColumnSize:=4 cela est illogique parce que la propriété resize n'a pas de membres appelés Select et Select (si elle devait exister) n'accepte pas un paramètre appelé ColumnSize.

Pourquoi Selection.Resize(ColumnSize:=4).Select fonctionne est parce que vous avez essentiellement écrit

Dim TempRange as Range 
set TempRange = Selection.Resize(ColumnSize:=4) 
TempRange.Select 
Set TempRange = Nothing 

Mais il est sur une seule ligne.

liés à c'est un awesome article écrit par Eric Lippert sur VBA parantheses

pour Gotcha
+0

Merci Brad - fait grand sens. – EndlessLoop

+0

Belle explication. Tangentiellement, et peut-être intéressant, le 'ListObject' a une méthode' Resize' qui prend un argument 'Range' :). –

+0

Redémarrage d'un ancien poste juste pour faire une correction au cas où quelqu'un trébucherait sur ceci dans une recherche: AFAIK cette ligne est incorrecte: 'set TempRange = Selection.Resize ColumnSize: = 4'. Parce que 'Resize' est une propriété et non une méthode, ses arguments doivent avoir des parenthèses autour d'eux. 'Set TempRange = Selection.Resize (ColumnSize: = 4)' est le bon formulaire. – EndlessLoop

Questions connexes