Възможно дублиране:
Грешка при добавяне в Excel #NAME?
Мисля, че това е последваща заявка към моя по-рано докладван проблем, свързан с функцията, дефинирана от потребителя в Excel.
Аз съм в състояние да използва функцията в Excel, когато се използва ръчно, но когато пиша в Excel файл, използвайки Matlab използва xlswrite, той дава грешка #NAME?
Прилагам екранни снимки на двете, когато ги въвеждам ръчно и когато използвам функцията чрез Matlab.
Благодаря
РЕДАКТИРАНЕ :
Благодаря много. Запазих функцията VBA като добавка към Excel тук:
C: UsersAdministratorAppDataRoamingMicrosoftAddins
Ето какво видях за добавките в 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 (име на ExcelFile, формула_признание, име на лист, местоположение_Аг);
Също така се опитах да дам пълния път, както бе предложено. Но това не се получи.
Благодаря
Отговори:
1 за отговор № 1Трябва да посочите работната книга, дефинирана от СДС. Дори ако вашата функция е вашият 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