Показать сообщение отдельно
Старый 11.05.2011, 15:10   #1  
arty is offline
arty
Участник
 
3 / 10 (1) +
Регистрация: 21.04.2006
не работает запуск макроса в Excel
Коллеги, возникла следующая проблема:
в DAX 2009 пытаюсь через .NET interop вызвать существующий в книге Excel макрос, но безуспешно.
Код следующий:
X++:
Microsoft.Office.Interop.Excel._Application   app;
Microsoft.Office.Interop.Excel.Workbooks    wbs;
Microsoft.Office.Interop.Excel._Workbook    wb;
 
CLRObject ex;
 
Microsoft.Office.Core.MsoAutomationSecurity mas =
CLRInterop::parseClrEnum("Microsoft.Office.Core.MsoAutomationSecurity", "msoAutomationSecurityLow");
;
try
{
    app = new Microsoft.Office.Interop.Excel.ApplicationClass();
    app.set_Visible(false);
    app.set_DisplayAlerts(false);
    app.set_AutomationSecurity(mas); //на всякий случай
 
    wbs = app.get_Workbooks();
    wb  = wbs.Add(#templateName);
 
    app.Run("testMacro", null, null, null, null, null, null, null, null, null, null, 
            null, null, null, null, null, null, null, null, null, null, 
            null, null, null, null, null, null, null, null, null, null);
 
    app.set_Visible(true);
}
catch
{
    ex = CLRinterop::getLastException();
    if (ex)
    {
        info(ex.ToString());
    }
}
При выполнении возникает исключение:
Цитата:
System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.Runtime.InteropServices.COMException (0x800A03EC): Не удается выполнить макрос "testMacro". Возможно, этот макрос отсутствует в текущей книге либо все макросы отключены.
в Microsoft.Office.Interop.Excel.ApplicationClass.Run(Object Macro, Object Arg1, Object Arg2, Object Arg3, Object Arg4, Object Arg5, Object Arg6, Object Arg7, Object Arg8, Object Arg9, Object Arg10, Object Arg11, Object Arg12, Object Arg13, Object Arg14, Object Arg15, Object Arg16, Object Arg17, Object Arg18, Object Arg19, Object Arg20, Object Arg21, Object Arg22, Object Arg23, Object Arg24, Object Arg25, Object Arg26, Object Arg27, Object Arg28, Object Arg29, Object Arg30)
--- Конец трассировки внутреннего стека исключений ---
в System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
в System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
в ClrBridgeImpl.InvokeClrInstanceMethod(ClrBridgeImpl* , ObjectWrapper* objectWrapper, Char* pszMethodName, Int32 argsLength, ObjectWrapper** arguments, Boolean* argsAreByRef, Boolean* isException)
Может кто сталкивался или есть идеи? Через COM примерно то же самое работало