在Matlab中使用Excel的用户定义函数时出错

时间:2012-04-28 08:56:37

标签: excel matlab excel-vba excel-formula vba

  

可能重复:
  Excel Addin Error #NAME?

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

我可以在手动使用Excel时使用该功能,但是当我使用xlswrite使用Matlab写入excel文件时,它会出错[{1}}

Using the function manually

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

Using xlswrite in Matlab

由于

编辑:

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

C:\用户\管理员\应用程序数据\漫游\微软\加载项

以下是我在自动化中使用时未加载的Excel加载项的信息:​​

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

我在这里附上chi_squared()代码的小片段:

#NAME?

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

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

[status,message] = xlswrite1(ExcelFilename,Formula_chisqr,sheetname,Location_Agg);

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

由于

2 个答案:

答案 0 :(得分:1)

您必须指定UDF定义的工作簿。即使你的功能是你的PERSONAL.XLSB文件。只有在使用UDF的同一文件中定义了UDF时,才必须这样做。

例如,

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

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

如果您希望能够在任何文件中调用UDF而不指定文件名,则需要将文件另存为加载项,然后在Options - Add-ins - Manage Add-ins中启用它。


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

答案 1 :(得分: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); 

来源:Mathworks