我正在尝试使用在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插件,我不知道下一步该尝试什么。在此先感谢您的帮助。
请尝试以下代码:
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?
希望它能帮到你!