Partager via


Excel4/Excel12

S’applique à: Excel 2013 | Office 2013 | Visual Studio

Appelle une fonction de feuille de calcul Microsoft Excel interne, une fonction ou une commande de feuille de macro, ou une fonction ou une commande spéciale XLL uniquement, à partir d’une dll/XLL ou d’une ressource de code.

Toutes les versions récentes d’Excel prennent en charge Excel4. À compter d’Excel 2007, Excel12 est pris en charge.

Ces fonctions peuvent être appelées uniquement lorsqu’Excel a passé le contrôle à la DLL ou XLL. Ils peuvent également être appelés lorsqu’Excel a transmis le contrôle indirectement via un appel à Visual Basic pour Applications (VBA). Ils ne peuvent pas être appelés à un autre moment. Par exemple, ils ne peuvent pas être appelés pendant les appels à la fonction DllMain ou à d’autres moments où le système d’exploitation a appelé la DLL, ou à partir d’un thread créé par la DLL.

Les fonctions Excel4v et Excel12v acceptent leurs arguments sous forme de tableau, tandis que les fonctions Excel4 et Excel12 acceptent leurs arguments sous la forme d’une liste de longueur variable sur la pile. À tous les autres égards, Excel4 se comporte de la même façon qu’Excel4v et Excel12 se comporte de la même façon qu’Excel12v.

int Excel4(int iFunction, LPXLOPER pxRes, int iCount, LPXLOPER argument1, ...);
int Excel12(int iFunction, LPXLOPER12 pxRes, int iCount, LPXLOPER12 argument1, ...);

Paramètres

iFunction (int)

Nombre qui indique la commande, la fonction ou la fonction spéciale que vous souhaitez appeler. Pour obtenir la liste des valeurs iFunction valides, consultez la section Notes suivante.

pxRes (LPXLOPER ou LPXLOPER12)

Pointeur vers un XLOPER (avec Excel4) ou un XLOPER12 (avec Excel12) qui contiendra le résultat de la fonction évaluée.

iCount (int)

Nombre d’arguments suivants qui seront passés à la fonction. Dans les versions d’Excel jusqu’à 2003, il peut s’agir de n’importe quel nombre compris entre 0 et 30. À compter d’Excel 2007, il peut s’agir de n’importe quel nombre compris entre 0 et 255.

argument1, ... (LPXLOPER ou LPXLOPER12)

Arguments facultatifs de la fonction. Tous les arguments doivent être des pointeurs vers XLOPER ou XLOPER12 valeurs.

Valeur renvoyée

Retourne l’une des valeurs entières (int) suivantes.

Valeur Code de retour Description
0 xlretSuccess La fonction a été appelée avec succès. Cela ne signifie pas que la fonction n’a pas retourné de valeur d’erreur Excel ; pour le savoir, vous devez examiner le type et la valeur du paramètre pxRes résultant.
1 xlretAbort La commande ou la fonction a été arrêtée anormalement (abandon interne). Cela peut se produire si une feuille de macro XLM se ferme en appelant CLOSE, ou si Excel est en mémoire insuffisante. Si Excel retourne cette erreur, la fonction appelante doit se fermer immédiatement. La DLL est autorisée à appeler xlFree uniquement avant de quitter. Tous les autres appels à l’API C ne sont pas autorisés. L’utilisateur peut enregistrer n’importe quel travail de manière interactive à l’aide de la commande Enregistrer dans le menu Fichier .
2 xlretInvXlfn Un numéro de fonction non valide a été fourni. Si vous utilisez des constantes du fichier d’en-tête Xlcall.h, cela ne doit pas se produire, sauf si vous appelez un élément qui n’est pas pris en charge dans la version d’Excel que vous exécutez.
4 xlretInvCount Un nombre d’arguments non valide a été entré. Dans les versions jusqu’à Excel 2003, le nombre maximal d’arguments qu’une fonction peut prendre est de 30. À compter d’Excel 2007, le nombre maximal est 255. Certains nécessitent un nombre fixe ou minimal d’arguments.
8 xlretInvXloper Un XLOPER ou XLOPER12 non valide a été passé à la fonction, ou un argument du type incorrect a été utilisé.
16 xlretStackOvfl Un dépassement de capacité de la pile s’est produit. Utilisez xlStack pour surveiller la quantité de place restante sur la pile. Évitez d’allouer des structures et des tableaux locaux (automatiques) très volumineux sur la pile dans la mesure du possible ; les rendre statiques. (Notez qu’un dépassement de capacité de la pile peut se produire sans être détecté.)
32 xlretFailed Échec d’une fonction équivalente à une commande. Cela équivaut à une commande macro affichant la boîte de dialogue d’alerte d’erreur de macro.
64 xlretUncalced Une tentative de déréférencement d’une cellule qui n’a pas encore été calculée, car elle est planifiée pour être recalculée après la cellule active. Dans ce cas, la DLL doit retourner immédiatement le contrôle à Excel. La DLL est autorisée à appeler xlFree uniquement avant de quitter. Tous les autres appels à l’API C ne sont pas autorisés. Pour plus d’informations sur les fonctions qui peuvent et ne peuvent pas accéder aux valeurs des cellules qui n’ont pas été recalculées, voir Commandes, fonctions et états Excel.
128 xlretNotThreadSafe Une tentative d’appel d’une fonction qui n’est pas ou n’est peut-être pas thread-safe pendant un recalcul multithread du classeur a été effectuée. À compter d’Excel 2007, cette valeur est retournée et uniquement dans les fonctions de feuille de calcul XLL déclarées comme thread-safe.
256 xlRetInvAsynchronousContext Le handle de fonction asynchrone n’est pas valide. Cette valeur est utilisée uniquement par Excel 2010.
512 xlRetNotClusterSafe L’appel n’est pas pris en charge sur les clusters. Cette valeur est utilisée uniquement par Excel 2010.

Remarques

Valeurs iFunction valides

Les valeurs iFunction valides sont l’une des constantes xlf... ou xlc... définies dans le fichier d’en-tête Xlcall.h ou l’une des fonctions spéciales suivantes.

  • xlAbort
  • xlEnableXLMsgs
  • xlGetInst
  • xlSheetNm
  • xlCoerce
  • xlFree
  • xlGetName
  • xlStack
  • xlDefineBinaryName
  • xlGetBinaryName
  • xlSet
  • xlUDF
  • xlDisableXLMsgs
  • xlGetHwnd
  • xlSheetId

Différents types de fonctions

Excel4 et Excel12 font la distinction entre trois classes de fonctions. Les fonctions sont classées selon les trois états dans lesquels Excel peut appeler la DLL.

  • La classe 1 s’applique lorsque la DLL est appelée à partir d’une feuille de calcul à la suite d’un recalcul.
  • La classe 2 s’applique lorsque la DLL est appelée à partir d’une macro de fonction ou d’une feuille de calcul où elle a été inscrite avec un signe numérique (#) dans le texte de type.
  • La classe 3 s’applique lorsqu’une DLL est appelée à partir d’un objet, d’une macro, d’un menu, d’une barre d’outils, d’une touche de raccourci, d’une méthode ExecuteExcel4Macro ou de la commande Tools/Macro/Run . Pour plus d’informations, consultez Commandes, fonctions et états Excel.

Le tableau suivant indique les fonctions valides dans chaque classe.

Classe 1 Classe 2 Classe 3
N’importe quelle fonction de feuille de calcul
Toute fonction xlL uniquement... à l’exceptionde xlSet. xlfCaller
N’importe quelle fonction de feuille de calcul
Toute fonction xl... à l’exceptionde xlSet.
Fonctions de feuille de macro, y compris xlfCaller, qui retournent une valeur mais n’effectuent aucune action qui affecte l’espace de travail ou tout classeur ouvert.
N’importe quelle fonction, y compris xlSet et les fonctions équivalentes aux commandes.

Afficher la boîte de dialogue d’une fonction Command-Equivalent

Si une fonction équivalente à une commande est associée à une boîte de dialogue, vous pouvez définir le bit xlPrompt dans iFunction. Cela signifie qu’Excel affiche la boîte de dialogue appropriée avant d’exécuter la commande.

Écrire des DLL internationales

Si vous définissez le bit xlIntl dans iFunction, la fonction ou la commande est exécutée comme si elle était appelée à partir d’une feuille macro internationale. Cela signifie que la commande se comporte comme sur la version américaine d’Excel, même si elle s’exécute sur une version internationale (localisée).

xlretUncalced ou xlretAbort

Après avoir reçu l’une de ces valeurs de retour, votre DLL doit propre et retourner immédiatement le contrôle à Excel. Les rappels dans Excel via l’API C, à l’exception de xlFree, sont désactivés après réception de l’une de ces valeurs de retour.

Exemple

L’exemple suivant utilise la fonction Excel12 pour sélectionner la cellule à partir de laquelle elle a été appelée.

Cet exemple de code fait partie d’un exemple plus large fourni dans le Kit de développement logiciel (SDK) Excel 2010 XLL, à l’emplacement suivant où vous avez installé le SDK :

\Samples\Example\Example.c.

Remarque

Cette fonction appelle une macro de commande (xlcSelect) et, par conséquent, fonctionne uniquement si elle est appelée à partir d’une feuille macro XLM.

short WINAPI Excel12Example(void)
{
    XLOPER12 xRes;
    Excel12(xlfCaller, &xRes, 0);
    Excel12(xlcSelect, 0, 1, (LPXLOPER12)&xRes);
    Excel12(xlFree, 0, 1, (LPXLOPER12)&xRes);
    return 1;
}

Voir aussi

Excel4v/Excel12v