我制作了一个VBA宏,它从Outlook日历中获取所有事件,并将它们写入excel文件。
然后,我需要从powershell脚本或C#控制台应用程序中执行这个宏。
有办法这样做吗?
Im在win10上使用Outlook 2013。
发布于 2018-06-15 15:20:06
Outlook的Application类没有Run成员,因此很难在进程外调用VBA代码(即使是进程中的代码),这可能是出于安全原因。当橡胶鸭最初实现对Outlook的单元测试支持时,它是一个文字黑客作业,涉及创建命令栏按钮并将其"OnAction“分配给我们想要调用的单元测试过程-如下所示:
var app = Application;
var exp = app.ActiveExplorer();
CommandBar cb = exp.CommandBars.Add("RubberduckCallbackProxy", Temporary: true);
CommandBarControl btn = cb.Controls.Add(MsoControlType.msoControlButton, 1);
btn.OnAction = declaration.QualifiedName.ToString();
btn.Execute();
cb.Delete();因此,如果您制作了btn.OnAction = "YourMacro";并引用了Outlook程序集(Application是Microsoft.Office.Interop.Outlook.Application),我相信它可以工作--尽管宏必须在一个标准模块中--如果它在ThisOutlookSession中,那么车轮就会掉下来。
(请注意,从那时起,我们就想出了一种更优雅的、与主机无关的方法来运行用户的测试方法,但这是不可能的。)
ThisOutlookSession对象是在运行时与该类的公共成员一起扩展的,所以如果您的宏是用ThisOutlookSession编写的,那么从VBA代码可以像app.MacroName一样调用它,但是我们还不能让它从C#代码中运行。
最后,请注意上面的代码将泄漏COM对象。确保您正确地清理了非托管对象,否则您将在等待被杀死的任务管理器中看到一个幽灵OUTLOOK.EXE进程,就在您的脚本/控制台应用程序消失之后。
https://stackoverflow.com/questions/50878070
复制相似问题