Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何将发送的邮件保存到Office 365中SentOnBehalfName邮箱的文件夹?_Vba_Outlook_Office365 - Fatal编程技术网

Vba 如何将发送的邮件保存到Office 365中SentOnBehalfName邮箱的文件夹?

Vba 如何将发送的邮件保存到Office 365中SentOnBehalfName邮箱的文件夹?,vba,outlook,office365,Vba,Outlook,Office365,在工作中,我们通过共享收件箱发送电子邮件。电子邮件将进入用户自己发送的邮件,而不是共享收件箱 我写了一些VBA代码来整理这个问题。我们正在迁移到Outlook 365&那里的代码不起作用 私有子应用程序\u ItemSend(ByVal项作为对象,取消作为布尔值) 如果TypeName(Item)=“MailItem”,则“如果Item是MailItem” 如果Item.SentOnBehalfOfName为“”,则为“”,如果项目是代表收件箱发送的 '将已发送的电子邮件保存在相关收件箱的“已发

在工作中,我们通过共享收件箱发送电子邮件。电子邮件将进入用户自己发送的邮件,而不是共享收件箱

我写了一些VBA代码来整理这个问题。我们正在迁移到Outlook 365&那里的代码不起作用

私有子应用程序\u ItemSend(ByVal项作为对象,取消作为布尔值)
如果TypeName(Item)=“MailItem”,则“如果Item是MailItem”
如果Item.SentOnBehalfOfName为“”,则为“”,如果项目是代表收件箱发送的
'将已发送的电子邮件保存在相关收件箱的“已发送邮件”文件夹中
Item.SaveSentMessageFolder GetNamespace(“MAPI”)。文件夹(Item.SentonBehalfName)。文件夹(“已发送项目”)
如果结束
如果结束
端接头
我试过了

msgbox GetNamespace(“MAPI”).Folders(Item.sentonBehalfName).Folders(“Sent Items”).Name
它给出了文件夹的名称,但发送的项目不在其中

我创建了一个“Test”文件夹并保存到忽略Item.SentOnBehalfOfName的文件夹中&如果“Test”文件夹在我自己的收件箱中,但如果它在共享收件箱中,则不起作用

我尝试更改代码以使用Set&包含应用程序,如下所示

Set Item.SaveSentMessageFolder=Application.GetNamespace(“MAPI”).Folders(Item.sentonBehalfName).Folders(“已发送项目”)

您可以从单个存储设置文件夹,但无法从其他存储/帐户设置文件夹。如果要将项目保存到另一个存储区,必须先保存项目,然后以编程方式将其移动到另一个文件夹/存储区

此外,我建议在提交项目之前设置属性:

Sub SetSentFolder()  
 Dim myItem As Outlook.MailITem  
 Dim myResponse As Outlook.MailITem  
 Dim mpfInbox As Outlook.Folder  
 Dim mpf As Outlook.Folder 

 Set mpfInbox = Application.Session.GetDefaultFolder(olFolderInbox)  
 Set mpf = mpfInbox.Folders.Add("SaveMyPersonalItems")  
 Set myItem = Application.ActiveInspector.CurrentItem  
 Set myResponse = myItem.Reply  
 myResponse.Display  
 myResponse.To = "Eugene Astafiev"  
 Set myResponse.SaveSentMessageFolder = mpf  
 myResponse.Send  
End Sub

在ThisOutlookSession模块中添加以下变量声明:

Private WithEvents Items As Outlook.Items
如果您还没有启动
应用程序
事件过程,请在代码区左侧下拉菜单中选择
应用程序
,并在代码区右侧下拉菜单中选择
启动
,创建它

要添加到此过程中的代码:

Set Items = Session.GetDefaultFolder(olFolderSentMail).Items
然后在代码区域的左侧下拉列表中,您需要选择
项目
&在代码区域的右侧下拉列表中,选择
项目发送

以下是此过程的外观:

Private子项\u ItemAdd(ByVal项作为对象)
如果TypeName(Item)=“MailItem”,则“如果Item是MailItem”
如果Item.SentOnBehalfOfName Session.Accounts.Item(1).CurrentUser则为“”,如果项目是代表用户自己的收件箱发送的
'将电子邮件移动到相关收件箱的“已发送邮件”文件夹中
Item.Move GetNamespace(“MAPI”).Folders(Item.SentonBehalfName).Folders(“已发送项目”)
如果结束
如果结束
端接头

在提交项目之前是否尝试设置属性?嗨,Eugene,谢谢你的想法,但它不起作用&这是有道理的-这些是我正在发送的电子邮件,因此将myResponse设置为myItem.Reply时代码会出错。这是一个示例代码,显示在发送之前需要尝试设置
SaveSentMessageFolder
属性。您好,Eugene,用户可能有多个共享收件箱,因此无法在发送前真正设置SaveSentMessageFolder。我想你可以让用户运行一个宏,但这意味着要制作一个自动化的过程手册,这远远不够理想&老实说,我认为他们不会费心去做。我刚刚发现,你正在尝试从Outlook的另一个存储设置一个文件夹。我认为这根本不可能。你必须只处理单个存储区中的文件夹。嗨,尤金,如果是这样的话,那就很不幸了&我不明白为什么这在365年发生了变化。此代码与Outlook 2013一起使用,没有任何问题。