/ / Помилка використання функції Excel, визначеної користувачем, у Matlab [дублікат] - excel, matlab, excel-vba, excel-formula

Помилка використання функції Defined користувача Excel в Matlab [duplicate] - excel, matlab, excel-vba, excel-formula, vba

Можливі дублікати:
Помилка додавання Excel #NAME?

Я думаю, що це наступний запит до мого раніше повідомленого питання, що стосується функції користувача, визначеної в Excel.

Я можу використовувати функцію в Excel при використанні вручну, але коли я пишу в файл Excel, використовуючи Matlab з використанням xlswrite, це дає помилку #NAME?

Використання функції вручну

Я додаю скріншоти обох при введенні вручну і при використанні функції через Matlab.

Використання xlswrite в Matlab

Дякую

EDIT:

Дуже дякую. Я зберігаю функцію VBA як додаток Excel тут:

C: КористувачіАдміністраторAppDataRoamingMicrosoftAddins

Ось що я бачив про надбудови 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)

Ось як я пишу у файл Excel у Matlab:

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

[статус, повідомлення] = xlswrite1 (ExcelFilename, Formula_chisqr, sheetname, Location_Agg);

Я також намагався дати повний шлях, як запропонував. Але це не спрацювало.

Дякую

Відповіді:

1 для відповіді № 1

Ви повинні вказати робочу книгу, де визначається UDF. Навіть якщо ваша функція це ваш файл PERSONAL.XLSB. Ви не повинні робити це, тільки якщо 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 для відповіді № 2

Коли ви відкриваєте Excel як COM-сервер, UDF-и та надбудови не завантажуються за замовчуванням. Отже, вам потрібно спочатку завантажити додаткові модулі, якщо ви хочете використовувати надбудову у вашому файлі Excel.

Ось невеликий фрагмент коду в Matlab, який завантажує надбудови до відкриття файлу Excel.

Excel = actxserver ("Excel.Application");
Excel.Workbooks.Open("C:YourAddInFolderAddInNameWithExtension");
Excel.Workbooks.Item("AddInNameWithExtension").RunAutoMacros(1);

File="C:YourFileFolderFileName";
if ~exist(File,"file")
ExcelWorkbook = Excel.Workbooks.Add;
ExcelWorkbook.SaveAs(File,1);
ExcelWorkbook.Close(false);

end
Excel.Workbooks.Open(File);

Джерело: Mathworks