我正在尝试使用一个按钮来创建自定义功能区,该按钮会触发Outlook 2010中的VBA宏。功能区本身的创建工作正常,但该按钮不会触发VBA。
我尝试了以下解决方案:1)How-to: Run existing Word VBA Macros from C# Ribbon Addin,但是由于AFAIK Outlook.Application没有与Excel或Word相反的Run()方法,因此它引发了错误。
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#和Office加载项不是很熟悉,所以我不知道下一步该怎么做。预先感谢您的帮助。
答案 0 :(得分: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?
希望它对您有所帮助!