C # VSTO для Outlook - кнопка, которая запускает макрос VBA - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь создать пользовательскую ленту с помощью кнопки, которая запускает макрос VBA в Outlook 2010. Само создание ленты работает нормально, но кнопка не запускает VBA.

Я попробовал следующие решения: 1) Как: запустить существующие макросы Word VBA из надстройки ленты C # , но выдает ошибку, так как AFAIK Outlook.Application не имеет метода Run () В отличие от Excel или Word.

public void RunMacro(object otApp, object[] oRunArgs){

        otApp.GetType().InvokeMember("Run",
            System.Reflection.BindingFlags.Default |
            System.Reflection.BindingFlags.InvokeMethod,
            null, oApp, oRunArgs);
    }

        public void RunChronosMacro(Office.IRibbonControl control)
        {
            RunMacro(oApp, new object[] { "TestMacro" })
        }

2) Третий ответ на этот вопрос Вызовите код Outlook VBA из c # , но он также вызывает исключение {"Unknow name. ( RESULT : 0x80020006 (DISP_E_UNKNOWNNAME))"}. Возможно, это работало в Outlook 2007, но не в моей среде. Поскольку этот ответ основан на коде Python, я также попробовал его на Python, но безуспешно.

public void RunChronosMacro(Office.IRibbonControl control)
{
    try
    {
        otApp.GetType().InvokeMember("TestMacro",
                    System.Reflection.BindingFlags.Default |
                    System.Reflection.BindingFlags.InvokeMethod,
                    null, otApp, arFunctionParameters);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(otApp);
                    otApp = null;
                    GC.Collect();
    }
    catch (Exception e)
    {
        MessageBox.Show(e.GetType().ToString());
    }

}

Я довольно сильно застрял в этом, и, поскольку я не очень хорошо знаком с надстройками C # и Office, я не знаю, что делать дальше. Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 07 сентября 2018

Пожалуйста, попробуйте код ниже:

    using Outlook = Microsoft.Office.Interop.Outlook;
object oMissing = System.Reflection.Missing.Value;

// create outlook object
Outlook.Application otApp = new Outlook.Application();

string[] functionParameters =
            { 
                sTo,
                sCC,
                sBCC,
                sSubject,
                sBody
            };

// Run the macro
otApp.GetType().InvokeMember("YourVBA",
            System.Reflection.BindingFlags.Default |
            System.Reflection.BindingFlags.InvokeMethod,
            null, otApp, functionParameters);

Для получения дополнительной информации, пожалуйста, обратитесь по ссылке ниже:

Необходимо запустить / вызвать макрос из кода C # для Outlook Addin

Как запустить макрос из надстройки VBE без Application.Run?

Надеюсь, это поможет вам!

...