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
22
demandé sur Dave Jarvis 2012-09-10 16:04:42

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

  1. ouvrez L'éditeur VBA (Alt + F11 sous Windows / Fn + Option + F11 sur un Mac)
  2. clic droit VBAProject
  3. Sélectionner Insérer > > Module
  4. Créez une fonction Public à l'intérieur de Module1, pour exemple:

    Public Function findArea(ByVal width as Double, _
                             ByVal height as Double) As Double
        ' Return the area
        findArea = width * height
    End Function
    
  5. Appeler à partir d'une cellule, comme toute autre fonction: =findArea(B12,C12)

Capture D'Écran Macro

35
répondu Adahus 2016-04-25 22:43:30

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.

5
répondu Uttam 2016-02-17 19:44:27

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.

-- https://stackoverflow.com/a/20659823/258482

4
répondu Arlen Beiler 2017-05-23 12:10:27

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.

3
répondu Ross Hunter 2015-12-13 19:58:39

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).

0
répondu Niraj Nawanit 2012-09-10 12:19:35

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.

0
répondu Jeff Maner 2012-09-11 16:08:35

Activer les macros.

0
répondu SunnyRed 2013-12-18 13:43:12

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.

0
répondu Gustavo 2015-03-17 14:11:14

Si vous utilisez les dernières versions d'Excel, pour voir fonctions VBA dans un autre classeur, vous devez:

  1. Enregistrez vos classeurs .xlsm
  2. Activer les macros comme suggéré ci-dessus
  3. 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.

0
répondu PhilCoder 2015-03-24 10:10:12