Recherche…


Syntaxe

  • IdentifierName [ arguments ]
  • Call IdentifierName [ (arguments) ]
  • [Let | Set] expression = IdentifierName [ (arguments) ]
  • [Let | Set] IdentifierName [ (arguments) ] = expression

Paramètres

Paramètre Info
IdentifiantNom Le nom de la procédure à appeler.
arguments Une liste d'arguments séparés par des virgules à transmettre à la procédure.

Remarques

Les deux premières syntaxes servent à appeler des procédures Sub ; Notez que la première syntaxe n'implique pas de parenthèses.

Voir c'est déroutant. Pourquoi ne pas toujours utiliser les parenthèses? pour une explication approfondie des différences entre les deux premières syntaxes.

La troisième syntaxe consiste à appeler les procédures Function et Property Get ; lorsqu'il y a des paramètres, les parenthèses sont toujours obligatoires. Le mot clé Let est facultatif lors de l'attribution d'une valeur , mais le mot clé Set est requis lors de l'attribution d'une référence .

La quatrième syntaxe consiste à appeler les procédures Property Let et Property Set ; l' expression à droite de l'affectation est transmise au paramètre value de la propriété.

Syntaxe d'appel implicite

ProcedureName
ProcedureName argument1, argument2

Appelez une procédure par son nom sans parenthèses.


Boîtier Edge

Le mot-clé d' Call n'est requis que dans un seul cas:

Call DoSomething : DoSomethingElse

DoSomething et DoSomethingElse sont des procédures appelées. Si le mot-clé Call été supprimé, alors DoSomething sera analysé sous la forme d'une étiquette de ligne plutôt que d'un appel de procédure, ce qui briserait le code:

DoSomething: DoSomethingElse 'only DoSomethingElse will run

Valeurs de retour

Pour récupérer le résultat d'un appel de procédure (par exemple, les procédures Function ou Property Get ), placez l'appel sur le côté droit d'une affectation:

result = ProcedureName
result = ProcedureName(argument1, argument2)

Les parenthèses doivent être présentes s'il y a des paramètres. Si la procédure n'a pas de paramètres, les parenthèses sont redondantes.

Ceci est déroutant. Pourquoi ne pas toujours utiliser les parenthèses?

Les parenthèses sont utilisées pour inclure les arguments des appels de fonction . Leur utilisation pour les appels de procédure peut provoquer des problèmes inattendus.

Parce qu'ils peuvent introduire des bogues, à la fois en exécutant en transmettant une valeur éventuellement non intentionnelle à la procédure, et à la compilation en étant simplement une syntaxe non valide.

Temps d'exécution

Les parenthèses redondantes peuvent introduire des bogues. Étant donné une procédure qui prend une référence d'objet comme paramètre ...

Sub DoSomething(ByRef target As Range)
End Sub

... et appelé avec des parenthèses:

DoSomething (Application.ActiveCell) 'raises an error at runtime

Cela provoquera une erreur d'exécution "Object Required" # 424. D'autres erreurs sont possibles dans d'autres circonstances: ici, la référence d'objet Application.ActiveCell Range est en cours d' évaluation et transmise par valeur, quelle que soit la signature de la procédure spécifiant que la target serait transmise ByRef . La valeur réelle transmise à DoSomething par ByVal dans l'extrait de DoSomething ci-dessus est Application.ActiveCell.Value .

Les parenthèses forcent VBA à évaluer la valeur de l'expression entre crochets et à transmettre le résultat ByVal à la procédure appelée. Lorsque le type du résultat évalué ne correspond pas au type attendu de la procédure et ne peut pas être converti implicitement, une erreur d'exécution est générée.

Compiler-temps

Ce code ne pourra pas être compilé:

MsgBox ("Invalid Code!", vbCritical)

Parce que l'expression ("Invalid Code!", vbCritical) ne peut pas être évaluée à une valeur.

Cela compilerait et fonctionnerait:

MsgBox ("Invalid Code!"), (vbCritical)

Mais serait vraiment idiot. Évitez les parenthèses redondantes.

Syntaxe d'appel explicite

Call ProcedureName
Call ProcedureName(argument1, argument2)

La syntaxe d'appel explicite requiert le mot-clé Call et les parenthèses autour de la liste d'arguments; les parenthèses sont redondantes s'il n'y a pas de paramètres. Cette syntaxe a été rendue obsolète lorsque la syntaxe d'appel implicite plus moderne a été ajoutée à VB.

Arguments optionnels

Certaines procédures ont des arguments facultatifs. Les arguments facultatifs viennent toujours après les arguments requis, mais la procédure peut être appelée sans eux.

Par exemple, si la fonction ProcedureName devait avoir deux arguments obligatoires ( argument1 , argument2 ) et un argument optionnel, optArgument3 , elle pourrait être appelée au moins de quatre manières:

' Without optional argument
result = ProcedureName("A", "B")

' With optional argument
result = ProcedureName("A", "B", "C")

' Using named arguments (allows a different order)
result = ProcedureName(optArgument3:="C", argument1:="A", argument2:="B")

' Mixing named and unnamed arguments 
result = ProcedureName("A", "B", optArgument3:="C")

La structure de l'en-tête de la fonction appelée ici ressemblerait à ceci:

Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String) As String

Le mot clé Optional indique que cet argument peut être omis. Comme mentionné précédemment, tous les arguments facultatifs introduits dans l'en-tête doivent apparaître à la fin, après tous les arguments requis.

Vous pouvez également fournir une valeur par défaut pour l'argument si une valeur n'est pas transmise à la fonction:

Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String = "C") As String

Dans cette fonction, si l'argument pour c n'est pas fourni, sa valeur par défaut sera "C" . Si une valeur est fournie, cela remplacera la valeur par défaut.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow