L'appel de sous à partir d'un autre module
J'ai un simple Function Test()
dans Module1
et un Sub SubName()
dans Module2
. Je suis en train d'appeler SubName()
de Function Test()
. Lorsque je tape:
Call Module2.SubName
et à la sortie de la raw, j'obtiens une erreur:
Erreur de compilation: Attendu: identificateur
Quand je viens de type Module2
et mettre Stop
, il me propose le nom de la sous-nom dans Module2. Donc, il ne voit en elle, mais ressemble manque quelque chose dans la syntaxe. Je ne peux pas comprendre ce qu'.
- Cette question connexe peut avoir quelques renseignements utiles.
- J'ai testé ton code et je ne pouvais pas reproduire votre problème. Le code a fonctionné comme prévu. Voir ce pour des conseils: Comment faire pour créer un Minimum, Complète et Vérifiable exemple
- OP, utilisez-vous l'un de ces Noms (p. ex. un Test, Module2, SubName) n'importe où ailleurs dans votre code?
Vous devez vous connecter pour publier un commentaire.
Certains liens connexes :
la Solution à votre question :Soit utiliserCall SubName
ou tout simplementSubName
.Test:
Après quelques tests, j'ai été en mesure de briser le code. L'erreur est PAS la même que vous obtenez, mais peut-être cela va nous rapprocher de la solution.
Module2.
de qualification est la cause de l'erreur? Avez-vous été en mesure de reproduire l'erreur? Je suis sûr ne l'étais pas. L'OP du code publié fonctionne très bien.Module2.
est le problème. J'ai, à tort, sauté à la conclusion.La solution est simple: il suffit d'utiliser la déclaration
et il sera appelé.
Clarifier quelques remarques:
Call SubName()
SubName Param1
- ou appelezCall SubName(Param1)
. N'utilisez pas deSubname(Param1)
- si param1 est un objet, cela va passer c'est la propriété par défaut pour les sous, pas de l'objet (par exemple,Subname (Range("A1"))
va passer la valeur de la cellule à la sous - mais pas de l'objet Range -Subname Range("A1")
va passer de l'objet Range.Module2.SubName
- cependant ce n'est nécessaire, si vous avez plusieursSubName
sous dans les différents modulesCall Module2.SubName
moi-même et cela a fonctionné comme prévu. Pourquoi pensez-vous que les crochets()
ou laCall
ou laModule2.
de qualification est la cause de l'erreur? "N'utilisez pas de sous-nom(Param1)- comme ce sera jeté Param1 à une chaîne de caractères!" Ce n'est pas vrai. Essayez-le et laissez-vous convaincre.Sub asub(v): MsgBox TypeName(v): End Sub
comme ceSub test2(): asub (3.1415926): asub (True): asub (5): End Sub
Pas des chaînes de caractères.asub Range("A1")
seraitRange
, maisasub (Range("A1"))
seraitstring
oudouble
, en fonction du contenu de A1.