VBA Fonction des paramètres Optionnels
Je fais appel à une partie spécifique de code plusieurs fois donc je voudrais utiliser des paramètres facultatifs.
Je peux écrire quelque chose comme:
Public Sub main()
strA = "A"
'Calling the function
CalculateMe (strA)
End Sub
Public Sub CalculateMe(strA As String)
Set rs = DB.OpenRecordset("tbl_A")
rs.MoveFirst
Do Until rs.EOF
If rs.Fields(0) = strA Then
dblA = rs.fields(2).Value
End If
rs.MoveNext
Loop
End Sub
Comment puis-je changer la fonction de détenir plus de 1 paramètres facultatifs?
Quelque chose comme:
Public Sub main()
strA = "A"
strB = "B"
'Calling the function
CalculateMe (strA, strB)
more code
End Sub
Public Sub CalculateMe(Optional strA As String, Optional strB as String)
Set rs = DB.OpenRecordset("tbl_A")
rs.MoveFirst
Do Until rs.EOF
If rs.Fields(0).Value = strA And rs.Fields(1).Value = strB Then
dblA = rs.Fields(2).Value
End If
rs.MoveNext
Loop
End Sub
Suivantes Pankaj Jaju les conseils, j'ai réussi à l'exécuter en le modifiant pour:
Public Sub main()
strA = "A"
strB = "B"
'Calling the function
dblA = CalculateMe (strA, strB)
End Sub
Public Function CalculateMe(Optional ByVal strA As String, Optional ByVal strB as String)
Set rs = DB.OpenRecordset("tbl_A")
rs.MoveFirst
Do Until rs.EOF
If rs.Fields(0).Value = strA And rs.Fields(1).Value = strB Then
dblA = rs.Fields(2).Value
End If
rs.MoveNext
Loop
End Sub
Maintenant, comment puis-je effacer la valeur d'un paramètre facultatif? J'aurai besoin de cela pour certains calculs. Quelque chose comme:
Set strA = Nothing
Je sais que c'est une vieille question maintenant, mais êtes-vous essayer de passer un tableau? Puis la boucle par le biais de x éléments du tableau?
Non, je n'étais pas; seulement 2 variables de chaîne de caractères. Je n'étais pas familier avec la syntaxe à l'époque et Pankaj Jaju aider à résoudre cela. La modification de la fonction à une sous-routine et en ajoutant ByVal activé pour effectuer ce que j'essayais de faire. Ignorer tous les autres posts/commentaires; ils sont seulement la confusion.
Non, je n'étais pas; seulement 2 variables de chaîne de caractères. Je n'étais pas familier avec la syntaxe à l'époque et Pankaj Jaju aider à résoudre cela. La modification de la fonction à une sous-routine et en ajoutant ByVal activé pour effectuer ce que j'essayais de faire. Ignorer tous les autres posts/commentaires; ils sont seulement la confusion.
OriginalL'auteur ProtoVB | 2015-02-27
Vous devez vous connecter pour publier un commentaire.
Changer vos sous et ajouter
ByVal
Lorsque vous appelez
CalculateMe
, vous pouvez choisir de spécifier des arguments à passer. Par exemple, si vous souhaitez utiliser uniquement lesstrB
, puis d'appelerCalculateMe(,"second")
. De même, si vous voulez utiliser seulement le premier paramètre, appelCalculateMe("first")
. Si vous ne souhaitez pas envoyer n'importe quel paramètre, il suffit d'appelerCalculateMe
.Puisque vous n'avez d'ignorer sa question, je vais demander à nouveau 😉 Au moment de l'exécution, comment dites-vous si le paramètre optionnel est fourni?
Utilisez cette instruction qui permettra de comparer votre paramètre à partir de Rien et faire des trucs basés sur:
If TheParameter Is Nothing Then [statements...]
j'ai fait un essai sur elle et j'ai utiliséTheParameter
comme une Chaîne de caractères... donc ce que je pense, c'est qu'il fonctionne avec n'importe quel type d'Objet.Voir la réponse ci-dessous extrait de la Puce Pearson.
OriginalL'auteur Pankaj Jaju
Extraits de Puce de Pearson excellente explication:
Règles régissant l'utilisation de paramètres optionnels:
Optional
mot-clé doit être présent pour rendre un paramètre facultatif.Variant
de donnéestype.
liste.
IsMissing
fonction fonctionne uniquement avec des paramètres déclaréscomme
Variant
. Il sera de retourFalse
lorsqu'il est utilisé avec un autre type de données.Exemple
Ici, L1 et L2 sont nécessaires, mais P1 et P2 sont en option. Depuis que les deux sont
Variant
types, nous pouvons utiliserIsMissing
pour déterminer si le paramètre a été passé.IsMissing
retourneTrue
si leVariant
paramètre est omis, ouFalse
si leVariant
paramètre est inclus. Si le type de données du paramètre facultatif est tout type de données autres queVariant
,IsMissing
sera de retourFalse
.OriginalL'auteur Christopher Peisert
Je ne suis pas sûr de vous vraiment dire "facultatif". Dans votre exemple, vous êtes à la liste les arguments facultatifs, mais vous êtes de passage les deux arguments de la fonction.
En tout cas, ici vous passer les deux arguments:
Si vous souhaitez passer un seul des arguments, puis faire comme:
Ou:
Sinon, si vous êtes toujours en passant les deux arguments, alors il n'a pas de sens de les
Optional
.pourquoi voudriez-vous faire cela? Vous pouvez tout simplement passer un nullstring à la place:
Calculate("", strB)
etc... Honnêtement, il semble que vous essayez d'être trop de fantaisie avec votre approche, sans vraiment comprendre ce que vous faites.OriginalL'auteur David Zemens
Au lieu de
CalculateMe(,strB)
vous pouvez utiliserEncore une fois, ce est une réponse.
OriginalL'auteur user9026558