/ / Błąd przy użyciu zdefiniowanej przez użytkownika funkcji programu Excel w programie Matlab [duplicate] - excel, matlab, excel-vba, excel-formula, vba

Błąd przy użyciu zdefiniowanej przez użytkownika funkcji programu Excel w programie Matlab [duplicate] - excel, matlab, excel-vba, excel-formula, vba

Możliwe duplikaty:
Błąd dodawania pliku Excel nr NAZWA?

Myślę, że jest to kontynuacja zapytania do mojego wcześniej zgłoszonego problemu dotyczącego funkcji zdefiniowanej przez użytkownika w Excelu.

Mogę używać tej funkcji w programie Excel, gdy jest używana ręcznie, ale gdy piszę do pliku Excela za pomocą Matlab przy użyciu xlswrite, to powoduje błąd #NAME?

Używanie funkcji ręcznie

Załączam zrzuty ekranów obu, gdy wprowadzam je ręcznie i podczas korzystania z funkcji przez Matlab.

Używanie xlswrite w Matlab

Dzięki

EDYTOWAĆ :

Wielkie dzięki. Zachowałem funkcję VBA jako dodatek do Excela tutaj:

C: UsersAdministratorAppDataRoamingMicrosoftAddins

Oto, co widziałem o dodatkach Excel nie załadowanych, gdy są używane w Automatyzacji:

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

Załączam mały fragment kodu z chi_squared () tutaj:

Function Chi_Squared(act, exp, Optional df)

Oto jak piszę do pliku Excela w Matlabie:

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

[status, wiadomość] = xlswrite1 (nazwa_pliku ExcelFormularz, wzór_chisqr, nazwa arkusza, nazwa_lokacji);

Próbowałem również podać pełną ścieżkę zgodnie z sugestią. Ale to nie zadziałało.

Dzięki

Odpowiedzi:

1 dla odpowiedzi № 1

Musisz określić skoroszyt, w którym zdefiniowano UDF. Nawet jeśli twoja funkcja to twój plik PERSONAL.XLSB. Nie musisz tego robić, tylko jeśli UDF jest zdefiniowany w tym samym pliku, w którym go używasz.

Na przykład,

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

Gdyby myFunctions.xlsb nie jest otwarte, konieczne może być określenie pełnej ścieżki do pliku.

Jeśli chcesz mieć możliwość wywoływania UDF w dowolnym pliku bez określania nazwy pliku, musisz zapisać plik jako dodatek, a następnie włączyć go w Options - Add-ins - Manage Add-ins.


Inny pomysł: Kiedy używasz XLSWRITE podaj nazwę pliku z rozszerzeniem XLSX, jak test.xlsx, nie tylko test. Domyślnie MATLAB zapisuje pliki XLS rozszerzenie w starszym formacie. Wygląda na to, że po otwarciu takiego pliku w nowszej wersji programu Excel (2007/2010) tryb zgodności nie pozwala na uruchamianie makr lub UDF.


1 dla odpowiedzi nr 2

Po otwarciu Excela jako serwera COM, UDF i dodatki nie są ładowane domyślnie, więc najpierw należy załadować dodatki, jeśli chcesz użyć dodatku do pliku Excel.

Oto mały fragment kodu w Matlab, który ładuje dodatki przed otwarciem pliku 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);

Źródło : Mathworks