2

可能重复:
Excel 插件错误 #NAME?

我认为这是对我之前报告的有关 Excel 中用户定义函数的问题的后续查询。

手动使用时,我可以在 Excel 中使用该函数,但是当我使用 Matlab 使用 xlswrite 写入 excel 文件时,会出现错误#NAME?

手动使用该功能

我附上了手动输入和通过 Matlab 使用该功能时的屏幕截图。

在 Matlab 中使用 xlswrite

谢谢

编辑 :

非常感谢。我在这里将 VBA 函数存储为 Excel 插件:

C:\Users\Administrator\AppData\Roaming\Microsoft\Addins

这是我看到的关于在自动化中使用时未加载 Excel 加载项的内容:

http://www.excelforum.com/excel-programming/472145-calling-excel-macro-from-vb-6-app-problem.html

我在这里附上了来自 chi_squared() 的一小段代码:

Function Chi_Squared(act, exp, Optional df)

这就是我在 Matlab 中写入 excel 文件的方式:

Formula_chisqr={[ '=chi_squared(' 'O2:O22' ',' 'M2:22' ')']};

[状态,消息] = xlswrite1(ExcelFilename,Formula_chisqr,sheetname, Location_Agg);

我还尝试按照建议给出完整的路径。但它没有用。

谢谢

4

2 回答 2

1

您必须指定 UDF 定义的工作簿。即使您的功能是您的 PERSONAL.XLSB 文件。仅当 UDF 在您使用它的同一文件中定义时,您不必这样做。

例如,

='myFunctions.xlsb'!chi_squired(O2:O21,P2:P21)

如果myFunctions.xlsb未打开,您可能需要指定文件的完整路径。

如果您希望能够在任何文件中调用 UDF 而无需指定文件名,则需要将该文件另存为 Add-in,然后在Options - Add-ins - Manage Add-ins.


另一个想法:当您使用 XLSWRITE 时,请提供扩展名为 XLSX 的文件名,例如test.xlsx,而不仅仅是test. 默认情况下,MATLABXLS以旧格式保存带有扩展名的文件。看起来当您在较新版本的 Excel (2007/2010) 中打开此类文件时,兼容模式不允许运行宏或 UDF。

于 2012-04-28T18:23:10.917 回答
1

当您将 Excel 作为 COM 服务器打开时,默认情况下不加载 UDF 和加载项。因此,如果您想在 Excel 文件中使用加载项,则需要先加载加载项。

这是 Matlab 中的小代码片段,它在打开 Excel 文件之前加载加载项。

Excel = actxserver ('Excel.Application'); 
Excel.Workbooks.Open('C:\YourAddInFolder\AddInNameWithExtension'); 
Excel.Workbooks.Item('AddInNameWithExtension').RunAutoMacros(1); 

File='C:\YourFileFolder\FileName'; 
if ~exist(File,'file') 
    ExcelWorkbook = Excel.Workbooks.Add; 
    ExcelWorkbook.SaveAs(File,1); 
    ExcelWorkbook.Close(false); 

end 
Excel.Workbooks.Open(File); 

资料来源: 数学作品

于 2012-04-29T04:58:51.143 回答