Compartir a través de


Problemas conocidos en el desarrollo de XLL de Excel

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

En este tema se describen los problemas conocidos en Microsoft Excel que puede encontrar en el desarrollo de XLL.

Anulación del registro de comandos y funciones XLL

Cuando un XLL registra una función o comando, Excel crea un nuevo nombre para el recurso y asocia una referencia a la función DLL con ese nombre. El nombre se toma del cuarto argumento, pxFunctionText, de la función xlfRegister . Este nombre está oculto en los cuadros de diálogo normales para administrar los nombres de hoja de cálculo. Para anular el registro de una función o comando, debe eliminar el nombre mediante la función xlfSetName , pasando el nombre pero sin pasar una definición. Sin embargo, un error impide que se quite el nombre de las listas del Asistente para funciones.

Truncamiento de cadena de descripción de argumentos en el Asistente para funciones

El parámetro pxArgumentHelp1 y todos los parámetros posteriores de la función xlfRegister son cadenas opcionales que corresponden a los argumentos de la función XLL. El Asistente para funciones los muestra para proporcionar ayuda en el cuadro de diálogo de construcción de argumentos. A veces, Excel trunca la cadena que corresponde al argumento final en uno o dos caracteres al mostrarla en el cuadro de diálogo. Para evitarlo, agregue una "cadena vacía" adicional como último parámetro de "ayuda de argumento" del registro de función.

Limitación del ámbito de nombre binario

Los nombres binarios y sus datos solo se pueden recuperar cuando la hoja de cálculo que estaba activa en el momento en que se crearon vuelve a estar activa. Dado que las funciones de hoja de cálculo no pueden activar hojas de cálculo dentro de un libro (solo los comandos pueden hacerlo), las aplicaciones de nombres binarios son muy limitadas. Si tiene un comando que solo se invoca desde una hoja de cálculo determinada, por ejemplo, podría usar un nombre binario para almacenar datos relacionados con comandos.

xlSet y libros con fórmulas de matriz

En Excel 2003 y versiones anteriores, se produce un error en la función xlSet si intenta asignar valores a un rango de una hoja de cálculo que no es la hoja de cálculo activa, donde el rango equivalente de la hoja activa contiene una fórmula de matriz. En este caso, Excel muestra el mensaje "No se puede cambiar parte de una matriz". Esto se corrigió en Excel 2007.

Las referencias circulares se toleran en tablas de datos

Actualmente, Excel no genera un error si el cálculo en el que se basa una tabla de datos hace referencia a algo de la propia tabla. Por poco probable que sea este escenario, debe tener cuidado al crear o modificar fórmulas que se usan para calcular valores de tabla de datos.

Convertir un XLOPER12 entero en un XLOPER

Dado que el tipo entero xltypeInt es un entero de 32 bits con signo en el tipo de datos XLOPER12 , pero es solo un entero de 16 bits con signo en el tipo de datos XLOPER , es posible que algunos valores enteros XLOPER12 no se puedan contener en un XLOPER entero. Cuando Excel convierte este tipo internamente, se soluciona este problema convirtiendo el tipo en un xltypeNumXLOPER de punto flotante.

La función Framework XLOper12ToXLOper refleja este comportamiento para que sea coherente con Excel internamente. Al llamar a esta función, no debe suponer que el XLOPER devuelto siempre será xltypeInt; leer my_xloper.val.w proporciona un valor false si el tipo de my_xloper es xltypeNum.

Devolver XLOPER o XLOPER12 modificando argumentos en contexto

Excel permite el registro de funciones que devuelven un XLOPER o XLOPER12 modificando un argumento en su lugar. Sin embargo, si un argumento XLOPER/ XLOPER12 apunta a la memoria y, a continuación, el valor devuelto de la función DLL sobrescribe el puntero, Excel puede perder memoria. Excel no muestra un error, pero podría bloquearse con el tiempo. Además, si el archivo DLL asigna memoria para el valor devuelto, Excel podría intentar liberar esa memoria, lo que podría provocar un bloqueo inmediato de la aplicación. Por lo tanto, no debe modificar XLOPER/ XLOPER12 argumentos en su lugar. Todos los argumentos XLOPER o XLOPER12 deben tratarse como de solo lectura.

Para obtener más información, consulte Administración de memoria en Excel.

Vea también

XLOper12ToXLOperDeveloping Excel XLLs
Referencia de funciones de API de SDK de XLL de Excel 2013
Administración de memoria en Excel