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?
Załączam zrzuty ekranów obu, gdy wprowadzam je ręcznie i podczas korzystania z funkcji przez 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 № 1Musisz 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