web-dev-qa-db-fra.com

Appeler un sous-marin dans VBA

C'est mon script simplifié:

    Sub SomeOtherSub(Stattyp As String)
        'Daty and the other variables are defined here

        CatSubProduktAreakum(Stattyp, Daty + UBound(SubCategories) + 2)

    End Sub

    Sub CatSubProduktAreakum(Stattyp As String, starty As Integer)

    'some stuff

    End Sub

L'appel de CatSubProduktAreakum est marqué en rouge comme "erreur de syntaxe". Je ne comprends pas l'erreur. C'est un simple appel de sous-routine avec deux arguments. Pourquoi VBA n'accepte-t-il pas l'appel?

40
reggie

Essayer -

Call CatSubProduktAreakum(Stattyp, Daty + UBound(SubCategories) + 2)

Quant à la raison, cela provient de MSDN via cette question - Que fait le mot clé Call dans VB6?

Vous n'êtes pas obligé d'utiliser le mot clé Call lorsque vous appelez une procédure. Toutefois, si vous utilisez le mot clé Call pour appeler une procédure nécessitant des arguments, liste d'arguments doit être entre parenthèses. Si vous omettez le mot-clé Call, vous devez également omettre les parenthèses autour de la liste d'arguments. Si vous utilisez l'une des deux syntaxes d'appel pour appeler une fonction intrinsèque ou définie par l'utilisateur, la valeur de retour de la fonction est ignorée.

64
ipr101

Pour ceux qui viennent encore sur ce post, l’autre option consiste simplement à omettre les parenthèses:

Sub SomeOtherSub(Stattyp As String)
    'Daty and the other variables are defined here

    CatSubProduktAreakum Stattyp, Daty + UBound(SubCategories) + 2

End Sub

Les mots-clés Call n'apparaissent que dans VBA pour la compatibilité avec les versions antérieures et ne sont donc pas obligatoires.

Si Cependant, vous décidez d'utiliser le mot clé Call, vous devez alors modifier votre syntaxe en conséquence.

'// With Call
Call Foo(Bar)

'// Without Call
Foo Bar

Les deux feront exactement la même chose.


Cela dit, il peut y avoir des cas à surveiller dans lesquels l'utilisation de parenthèses inutilement entraîne l'évaluation de choses que vous ne souhaitiez pas (comme le font les parenthèses dans VBA), de sorte que la meilleure option est probablement de omettez le mot-clé Call et les parenthèses

9
Sam