我正在开发一个Outlook实用程序,将当前打开的邮件转发到预设地址。
这可以通过宏来完成,但它们不容易部署到用户群。
我已经通过Visual Studio功能区设计为加载项创建了UI。我在功能区上有一个按钮用于此过程。
我正在尝试按照此处所述的按钮操作:forwarding MailItem Outlook Addinn issue。
如何转发当前选择?
namespace OutlookAddIn2
{
public partial class Ribbon1
{
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
}
private void button1_Click(object sender, RibbonControlEventArgs e)
{
sendMail();
}
private void sendMail(Outlook.MailItem mail)
{
Outlook.Application Application = Globals.ThisAddIn.Application;
Outlook.MailItem newmail = Application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
newmail = mail.Forward();
newmail.Recipients.Add("____@example.com");
newmail.Send();
}
}
}
答案 0 :(得分:1)
首先,如果您开发加载项,则无需创建新的Outlook应用程序实例。相反,您需要使用可在任何地方使用的Application属性。有关详细信息,请参阅Global Access to Objects in Office Projects。
如果您处理检查员窗口,您可以使用以下一系列调用:
Application.ActiveInspector().CurrentItem
其中ActiveInspector方法返回桌面上最顶层的Inspector对象。使用此方法可以访问用户最有可能查看的Inspector对象。例如:
Sub CloseItem()
Dim myinspector As Outlook.Inspector
Dim myItem As Outlook.MailItem
Set myinspector = Application.ActiveInspector
Set myItem = myinspector.CurrentItem
myItem.Close olSave
End Sub
但是如果您需要在资源管理器窗口中获取当前选定的项目,则可以使用以下序列:
Application.ActiveExplorer().Selection[1]
其中ActiveExplorer方法返回桌面上最顶层的Explorer对象。此方法对于确定何时没有活动资源管理器也很有用,因此可以打开一个新资源。
答案 1 :(得分:0)
在Excel工作簿中执行的上述代码CloseItem()呈现运行时错误438,对象不支持此属性或方法。我怀疑这是因为没有对创建的Outlook对象模型的正确引用。
我在Wedge发布的代码中找到了一个解决方案:Edit an open email from excel
我出于与上述相同的目的实施了该解决方案。
调整后的代码如下:
Sub CloseItemEdit()
Dim outlookApp As Outlook.Application
Set outlookApp = New Outlook.Application
Dim outlookInspector As Outlook.Inspector
Dim outlookMail As Outlook.MailItem
Set outlookInspector = outlookApp.ActiveInspector
If Not outlookInspector Is Nothing Then
If TypeOf outlookInspector.CurrentItem Is Outlook.MailItem Then
Set outlookMail = outlookInspector.CurrentItem
outlookMail.Close olSave
End If
End If
'Source: https://stackoverflow.com/questions/52596796/edit-an-open-email-from-excel
End Sub