Je ne fais que poster cela car je n'ai pas pu trouver de solution nulle part. J'ai finalement compris. C'est vraiment idiot.
Lors de l'utilisation de la propriété RunCode dans une macro d'accès, j'essayais d'exécuter un sous à partir de mon module global. Je recevais le message d'erreur "L'expression que vous avez entrée a un nom de fonction que base de données ne peut pas trouver." Je ne pouvais pas comprendre quel était le problème. J'ai suivi les conseils de tous ceux qui ont posté sur cette question, qui était principalement la suivante:
Ça n'a toujours pas marché!
ALORS j'ai lu le message d'erreur attentivement. Il mentionne qu'il n'a pas pu trouver le nom de la fonction. Apparemment, la propriété RunCode requiert spécifiquement une "Fonction" et non un Sub. Donc, j'ai simplement changé mon Sub en Function et ça a bien fonctionné!
J'espère que cela t'aides.
Une autre solution qui a fonctionné pour moi:
Le nom du module NE PEUT PAS avoir le même nom que la ou les procédures dans le (s) module (s).
J'ai eu un problème similaire avec le message d'erreur. Mon code VBA avait la déclaration suivante:
private function MyFunction()
....
end function
J'ai retiré la déclaration private
pour obtenir le Macro Runcode
afin d'exécuter la MyFunction()
Par exemple:
Function MyFunction()
End Function
Mon erreur a été de mettre la fonction dans un module de classe au lieu d'un module standard.
La base de données semble avoir besoin d'autres objets que la fonction VBA. Sans autres objets (en particulier une table dans mon cas), la fonction est introuvable dans l'environnement appelant (par exemple, Excel VBA).
Access 2013: une fonction appelée avec MyFunction () à partir de RunCode où MyFunction n'existe pas me donne l'erreur 2425. Cependant, aucune des solutions ci-dessus ne fonctionne pour moi et je recevais toujours l'erreur 2001 lorsque la fonction existe et est publique. La base de données est dans un emplacement approuvé. Aucune erreur de compilation, mais quelque chose dans MyFunction n'a pas fonctionné, à savoir
DoCmd.ShowAllRecords
après que GoToControl ait travaillé à sélectionner mon sous-formulaire. Le vrai problème était mon code pour supprimer un filtre avec VBA. Manuel pour ShowAllRecords semble indiquer que cela devrait fonctionner, mais le remplacement de DoCmd.ShowAllRecords par
DoCmd.RunCommand acCmdRemoveFilterSort
résolu mon problème.
Je voulais remercier John Tipton ci-dessus et ajouter de nouvelles informations. J'utilisais MS Access 2016 et j'ai commencé à avoir ce problème, donc ce problème a toujours sa tête laide. Pour que le mien fonctionne, le nom de la fonction et le nom de la macro doivent être différents et, dans le code après la fonction monFonction (), le nom doit être différent du nom du module que vous voyez dans la barre latérale Accès. Une autre chose étrange. Lorsque je sélectionnais RunCode dans Macro, il me montrait la fonction (cela ne me montrait pas les modules Sub VBA) que je tentais de sélectionner mais lorsque je le sélectionnais, Macro le codait comme nom de fonction avec un seul parent gauche "(". Cela fonctionnait sur une machine Windows 8 Pro.