Compartir a través de


Excel4/Excel12

Hace referencia a: Excel 2013 | Office 2013 | Visual Studio

Llama a una función de hoja de cálculo interna de Microsoft Excel, a una función o comando de hoja de macros, o a una función o comando especial de solo XLL, desde un recurso de código o DLL/XLL.

Todas las versiones recientes de Excel admiten Excel4. A partir de Excel 2007, se admite Excel12 .

Estas funciones solo se pueden llamar cuando Excel ha pasado el control al archivo DLL o XLL. También se pueden llamar cuando Excel ha pasado el control indirectamente a través de una llamada a Visual Basic para Aplicaciones (VBA). No se les puede llamar en ningún otro momento. Por ejemplo, no se les puede llamar durante las llamadas a la función DllMain u otras veces cuando el sistema operativo ha llamado al archivo DLL o desde un subproceso creado por el archivo DLL.

Las funciones Excel4v y Excel12v aceptan sus argumentos como una matriz, mientras que las funciones de Excel4 y Excel12 aceptan sus argumentos como una lista de longitud variable en la pila. En todos los demás aspectos, Excel4 se comporta igual que Excel4v y Excel12 se comporta igual que Excel12v.

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

Parameters

iFunction (int)

Número que indica el comando, la función o la función especial a la que desea llamar. Para obtener una lista de valores iFunction válidos, vea la siguiente sección Comentarios.

pxRes (LPXLOPER o LPXLOPER12)

Puntero a un XLOPER (con Excel4) o un XLOPER12 (con Excel12) que contendrá el resultado de la función evaluada.

iCount (int)

Número de argumentos posteriores que se pasarán a la función. En las versiones de Excel hasta 2003, puede ser cualquier número de 0 a 30. A partir de Excel 2007, puede ser cualquier número del 0 al 255.

argument1, ... (LPXLOPER o LPXLOPER12)

Argumentos opcionales para la función. Todos los argumentos deben ser punteros a XLOPER o XLOPER12 valores.

Valor devuelto

Devuelve uno de los siguientes valores enteros (int).

Valor Código devuelto Descripción
0 xlretSuccess La función se llamó correctamente. Esto no significa que la función no devolvió un valor de error de Excel; Para averiguarlo, debe examinar el tipo y el valor del parámetro pxRes resultante.
1 xlretAbort El comando o la función se terminó de forma anómala (anulación interna). Esto puede ocurrir si una hoja de macros XLM se cierra llamando a CLOSE o si Excel no tiene memoria. Si Excel devuelve este error, la función que realiza la llamada debe salir inmediatamente. El archivo DLL solo puede llamar a xlFree antes de salir. No se permiten todas las demás llamadas a la API de C. El usuario puede guardar cualquier trabajo de forma interactiva mediante el comando Guardar en el menú Archivo .
2 xlretInvXlfn Se proporcionó un número de función no válido. Si usa constantes desde el archivo de encabezado Xlcall.h, esto no debería ocurrir a menos que llame a algo que no se admite en la versión de Excel que está ejecutando.
4 xlretInvCount Se especificó un número no válido de argumentos. En versiones hasta Excel 2003, el número máximo de argumentos que puede tomar cualquier función es 30. A partir de Excel 2007, el número máximo es 255. Algunos requieren un número fijo o mínimo de argumentos.
8 xlretInvXloper Se pasó un XLOPER o XLOPER12 no válido a la función o se usó un argumento del tipo incorrecto.
16 xlretStackOvfl Se produjo un desbordamiento de pila. Use xlStack para supervisar la cantidad de espacio que queda en la pila. Evite asignar matrices y estructuras locales (automáticas) muy grandes en la pila siempre que sea posible; hacer que sean estáticas. (Tenga en cuenta que es posible que se produzca un desbordamiento de pila sin que se detecte).
32 xlretFailed Error en una función equivalente a un comando. Esto equivale a un comando de macro que muestra el cuadro de diálogo de alerta de error de macro.
64 xlretUncalced Se intentó desreferenciar una celda que aún no se ha calculado, porque está programada para volver a calcularse después de la celda actual. En este caso, el archivo DLL debe devolver el control a Excel inmediatamente. El archivo DLL solo puede llamar a xlFree antes de salir. No se permiten todas las demás llamadas a la API de C. Para obtener más información sobre qué funciones pueden y no pueden acceder a los valores de las celdas que no se han recalculado, vea Comandos, funciones y estados de Excel.
128 xlretNotThreadSafe Se intentó llamar a una función que no es segura para subprocesos o no lo es durante una actualización multiproceso del libro. A partir de Excel 2007, se devuelve este valor y solo dentro de las funciones de hoja de cálculo XLL declaradas como seguras para subprocesos.
256 xlRetInvAsynchronousContext El identificador de función asincrónica no es válido. Este valor solo lo usa Excel 2010.
512 xlRetNotClusterSafe La llamada no se admite en clústeres. Este valor solo lo usa Excel 2010.

Comentarios

Valores de iFunction válidos

Los valores iFunction válidos son cualquiera de las constantes xlf... o xlc... definidas en el archivo de encabezado Xlcall.h o en cualquiera de las siguientes funciones especiales.

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

Diferentes tipos de funciones

Excel4 y Excel12 distinguen entre tres clases de funciones. Las funciones se clasifican según los tres estados en los que Excel podría llamar al archivo DLL.

  • La clase 1 se aplica cuando se llama al archivo DLL desde una hoja de cálculo como resultado de la actualización.
  • La clase 2 se aplica cuando se llama al archivo DLL desde una macro de función o desde una hoja de cálculo donde se registró con un signo de número (#) en el texto de tipo.
  • La clase 3 se aplica cuando se llama a un archivo DLL desde un objeto, macro, menú, barra de herramientas, tecla de método abreviado, método ExecuteExcel4Macro o el comando Herramientas/Macro/Ejecutar . Para obtener más información, vea Comandos, funciones y estados de Excel.

En la tabla siguiente se muestra qué funciones son válidas en cada clase.

Clase 1 Clase 2 Clase 3
Cualquier función de hoja de cálculo
Cualquier función xl... de solo XLL, excepto xlSet. xlfCaller
Cualquier función de hoja de cálculo
Cualquier función xl... excepto xlSet.
Funciones de hoja de macros, incluido xlfCaller, que devuelven un valor pero no realizan ninguna acción que afecte al área de trabajo o a ningún libro abierto.
Cualquier función, incluidas las funciones xlSet y equivalentes a comandos.

Mostrar el cuadro de diálogo de una función Command-Equivalent

Si una función equivalente a un comando tiene un cuadro de diálogo asociado, puede establecer el bit xlPrompt en iFunction. Esto significa que Excel muestra el cuadro de diálogo adecuado antes de ejecutar el comando.

Escritura de archivos DLL internacionales

Si establece el bit xlIntl en iFunction, la función o el comando se lleva a cabo como si se llamara desde una hoja de macros internacional. Esto significa que el comando se comporta como lo haría en la versión estadounidense de Excel, incluso si se ejecuta en una versión internacional (localizada).

xlretUncalced o xlretAbort

Después de recibir uno de estos valores devueltos, el archivo DLL debe limpiar y devolver el control a Excel inmediatamente. Las devoluciones de llamada a Excel a través de la API de C, excepto xlFree, se deshabilitan después de recibir uno de estos valores devueltos.

Ejemplo

En el ejemplo siguiente se usa la función Excel12 para seleccionar la celda desde la que se llamó.

Este ejemplo de código forma parte de un ejemplo más grande proporcionado en el SDK XLL de Excel 2010, en la siguiente ubicación donde instaló el SDK:

\Samples\Example\Example.c.

Nota:

Esta función llama a una macro de comandos (xlcSelect) y, por lo tanto, solo funciona si se llama desde una hoja de macros 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;
}

Vea también

Excel4v/Excel12v