Comment appeler la fonction VBA à partir de cellules Excel (2010)?
J'ai défini quelques fonctions dans un classeur en utilisant VBA, puis je m'attendais à pouvoir les utiliser dans une formule de cellule - mais Excel ne reconnaît pas la fonction. Je reçois juste #nom?
Essayé:
- réalisant que j'avais créé un fichier XSLX, Je l'ai converti en un fichier XSLM. N'a pas fonctionné.
- a supprimé tous les types de la déclaration de fonction. N'a pas fonctionné.
- déplacé la fonction dans la feuille de calcul module VBA. N'a pas fonctionné.
- Ajouté Public à la déclaration. N'a pas travail.
Qu'est-ce que je manque?
Ce n'est pas un code intelligent, non plus:
Function Square2(AnyNumber)
'return the square of any integer
Square2 = AnyNumber * AnyNumber
End Function
9 réponses
Réponse
Mettre la fonction dans la zone" ThisWorkbook " peut causer le problème #NAME?
. Créer un nouveau Module (clic droit sur le dossier VBAProject, insérer, nouveau Module)
et mettez la fonction là à la place.
Étapes
- ouvrez L'éditeur VBA (
Alt + F11
sous Windows /Fn + Option + F11
sur un Mac) - clic droit VBAProject
- Sélectionner Insérer > > Module
-
Créez une fonction
Public
à l'intérieur deModule1
, pour exemple:Public Function findArea(ByVal width as Double, _ ByVal height as Double) As Double ' Return the area findArea = width * height End Function
Appeler à partir d'une cellule, comme toute autre fonction:
=findArea(B12,C12)
J'ai fait face au même problème, après avoir lutté autour de la suite a travaillé pour moi:
Ma fonction était dans un module dans un classeur de macro appelé personnel.XLSB. J'ai préfixé le nom de la fonction avec le nom de fichier du classeur de macro personnel et !, donc si le nom de la fonction est theFunction (x,y) j'ai entré dans la cellule " = personnel.XLSB!la fonction(x,y). Cela a fonctionné.
Veuillez noter que personnel.XLSB est toujours ouvert en mode caché pour moi.
Assurez-vous que vous n'êtes pas en mode création.
Il y a un bouton mode de conception dans l'onglet Développeur dans excel et à côté des boutons exécuter/arrêter dans l'éditeur VBA. S'il est sélectionné et ne vous permet pas de le désélectionner, essayez de rouvrir le classeur avec les macros activées.
S'il est toujours activé ou s'il ne laisse pas les macros s'exécuter, assurez-vous que les macros sont activées.
Activer les macros.
J'ai eu un problème identique, y compris une fonction de travail qui a cessé de fonctionner plus tard donnant une erreur #NAME. J'ai réussi à corriger les deux en m'assurant que le nom du module n'est pas le même que le nom de la fonction. J'avais une fonction de travail F_1 dans Module1, j'ai changé le nom du module en F_1 et il a cessé de fonctionner, maintenant de retour à Module1 et la fonction fonctionne à nouveau. Ma deuxième fonction a également commencé à fonctionner lorsque j'ai changé le nom du module de F_2 à Module2.
Le fichier XLSX et les fichiers XLSM n'ont rien à voir avec cela. Format joue le rôle lorsque vous enregistrez le fichier. (Dans XLSX, le code VBA sera supprimé lors de l'enregistrement du fichier).
Le code ci-dessous de http://office.microsoft.com/en-us/excel-help/creating-custom-functions-HA001111701.aspx fonctionne assez bien dans un nouveau module dans mon excel.
Function Discount(quantity, price)
If quantity >= 100 Then
Discount = quantity * price * 0.1
Else
Discount = 0
End If
Discount = Application.Round(Discount, 2)
End Function
Étant donné que je ne peux pas voir votre code, pouvez-vous essayer si la fonction ci-dessous fonctionne aussi pour vous? Si oui, commencez à modifier la fonction ci-dessous afin que cela devienne votre fonction (par exemple, changez d'abord le nom et voyez si cela fonctionne, puis changez le nombre de paramètres et vérifiez si cela fonctionne, puis changez le nom des paramètres).
J'ai ouvert Excel, ouvert l'éditeur de code (Alt + F11), sélectionné le nouveau classeur, inséré un nouveau Module, tapé
Function Decrement(i As Integer) As Integer
Decrement = i - 1
End Function
Puis est retourné à mon classeur et dans A1 typed = Decrement(2) et appuyez sur Entrée, et cela a fonctionné. Decrement est apparu dans la liste déroulante des fonctions que j'ai tapé = Decr ... Il a été reconnu, et cela a fonctionné. Je n'avais même pas besoin de sauvegarder le classeur.
Je sais que ce n'est pas exactement une réponse à votre question, mais c'est la recette avec laquelle j'ai eu de la chance.
Je pense qu'il pourrait y avoir un problème si votre Module a le même nom que votre fonction. Essayez de renommer votre module ou votre fonction.
Si vous utilisez les dernières versions d'Excel, pour voir fonctions VBA dans un autre classeur, vous devez:
- Enregistrez vos classeurs .xlsm
- Activer les macros comme suggéré ci-dessus
-
Définit une référence. Dans VBA (Alt-F11), choisissez Outils / Références, puis accédez au classeur qui contient la macro que vous souhaitez utiliser. Vérifiez que la référence dans la liste.
Si vous obtenez un message d'erreur sur les noms de modules qui s'affrontent, renommez-le d'abord dans l'Explorateur de projet.