C#VSTO for Outlook - 触发VBA宏的按钮

问题描述 投票:0回答:1

我正在尝试使用在Outlook 2010中触发VBA宏的按钮创建自定义功能区。功能区本身的创建工作正常,但按钮不会触发VBA。

我已经尝试过这些解决方案:1)How-to: Run existing Word VBA Macros from C# Ribbon Addin但它抛出一个错误,因为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)这个问题的第三个答案Call Outlook VBA code from 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#和Offices插件,我不知道下一步该尝试什么。在此先感谢您的帮助。

c# vsto outlook-addin outlook-vba
1个回答
0
投票

请尝试以下代码:

    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);

欲了解更多信息,请参阅以下链接:

Need to run/invoke macro from c# code for Outlook Addin

How can I run a macro from a VBE add-in, without Application.Run?

希望它能帮到你!

© www.soinside.com 2019 - 2024. All rights reserved.