我有一个使用ExecuteExcel4Macro注册UDF的加载项。这工作正常。加载项仅在当前会话中检测到兼容的工作簿时才会注册。
问题是我想更改当前的UDF只返回一个char但是char或excel错误。
我发现了一些关于使用Type库的文章,但我相信这意味着我的UDF将始终被注册,我想在注册时控制它。
我目前注册
ExcelApp.ExecuteExcel4Macro('REGISTER("filepath","add-in-name","AccountDescription","CC","Account Id","My Addin group")');
function AccountDescription ( sAccountId: PChar ) : PChar ; stdcall ;
我正在使用add-in-express来帮助实现Excel自动化。 CC指示该函数接受以空字符结尾的字符串,并期望返回以空字符结尾的字符串。我不确定是否可以指定变体,因此我可以返回Excel2000.xlErrNa。
编辑:上面修复了函数调用我忘了注册。
编辑(2): register函数中的第4个参数包含udf参数和返回值类型。我不确定如何表示变体。
编辑(3): dll /项目称为DynacViews2,在DynacViews2.dll源文件中有:
exports AccountDescription;
很抱歉,如果这有点零散。我想强调一下,目前正在使用上面的代码。问题是尝试更改AccountDescription的签名以返回OleVariant而不是PChar。
更改的原因是我想返回一个字符串或Excel错误。在线的其他示例包括add-in-express,使用TypeLibrary显示添加函数并将返回类型指定为variant。这将使用OleVariant创建签名,并且可以返回字符串或Excel错误(Excel2000.xlErrNa)。问题是我使用VBA REGISTER功能只在工作簿兼容的情况下才添加UDF。
我可能错误地解决了这个问题。
编辑4: Example of Register usage - 此链接显示注册用法,但不链接到任何微软网站,因此没有解释如何指定参数。
答案 0 :(得分:2)
根据Using the CALL and Register Functions,Variant不属于受支持的数据类型。
Code Description Pass by C Declaration
A Logical (FALSE = 0), TRUE = 1) Value short int
B IEEE 8-byte floating-point number Value (Windows) double (Windows)
Reference (Macintosh) double * (Macintosh)
C Null-terminated string Reference char *
(maximum length=255)
D Byte-counted string (first byte Reference Unsigned char *
contains length of string, maximum
string length = 255 characters)
E IEEE 8-byte floating-point number Reference double *
F Null-terminated string (maximum Reference (modify char *
string length = 255 characters) in place)
G Byte-counted string (first byte Reference (modify
contains length of string, maximum in place) unsigned char *
string length = 255 characters)
H Unsigned 2-byte integer Value unsigned short int
I Signed 2-byte integer Value short int
J Signed 4-byte integer Value long int
K Array Reference FP *
L Logical (FALSE = 0, TRUE = 1) Reference short int *
M Signed 2-byte integer Reference short int *
N Signed 4-byte integer Reference long int *
O Array Reference Three arguments are
passed:
unsigned short int *
unsigned short int *
double [ ]
P Microsoft Excel OPER data structure Reference OPER *
R Microsoft Excel XLOPER data structure Reference XLOPER *