我希望可以提出这样的问题。现在尝试自己编写代码完全超出了我的范围。
我需要一个Outlook 2007宏,它会在任何内容到达时永久删除已发送邮件文件夹的所有内容。可能吗?如何设置所有内容以便用户不必单击任何内容来运行它?
我知道我要一条鱼,我很尴尬,但我真的需要这个东西......
修改
我已将其粘贴到VBA编辑器中,转换为新模块:
Public Sub EmptySentEmailFolder()
Dim outApp As Outlook.Application
Dim sentFolder As Outlook.MAPIFolder
Dim item As Object
Dim entryID As String
Set outApp = CreateObject("outlook.application")
Set sentFolder = outApp.GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail)
For i = sentFolder.Items.Count To 1 Step -1
sentFolder.Items(i).Delete '' Delete from mail folder
Next
Set item = Nothing
Set sentFolder = Nothing
Set outApp = Nothing
End Sub
这只是我在网站上某处删除已删除邮件的一段代码的略微修改版本。它在我运行它时会删除已发送邮件文件夹。你能否帮我修改它,以便在文件夹中出现任何内容时删除已发送的项目,并且用户不必点击任何内容来运行它?我需要它是一个完全自动化的过程。
编辑2 如果您认为有比VBA更好的工具来实现这一点,请不要犹豫,编辑标签和评论。
编辑3:我做了一些有时可行的工作,但有时却没有。这太荒谬了。我设置了一条规则,ccs每个发送的电子邮件都带有附件给我。当我收到一封电子邮件时,另一条规则会运行以下代码。
Sub Del(item As Outlook.MailItem)
Call EmptySentEmailFolder
End Sub
这件事有三种行为,我无法确定触发哪种行为。有时事情会清除已发送邮件文件夹。有时它什么都不做。有时第二条规则会给出“操作失败”错误消息。
每当有什么东西来自我的地址时采取行动的想法都不是最优的,原因是我为了简洁起见省略了。我试图用报告替换它。我制定了一条规则,每当我发送电子邮件时都会发送一份传递报告。然后另一个规则在收到报告时运行代码。但是,这只有一种行为:它从不做任何事情。
这两个想法都是如此复杂,以至于任何事情都可能出错,我在调试时遇到了麻烦。两者都是非最佳解决方案。
答案 0 :(得分:0)
这是否可以接受?对不起,但是我的Outlook副本坏了。
当您进入Outlook VB编辑器时,Project Explorer将位于左侧。如果不是,请单击 Ctrl + R 。它看起来像这样:
+ Project1 (VbaProject.OTM)
或
- Project1 (VbaProject.OTM)
+ Microsoft Office Outlook Objects
+ Forms
+ Modules
如果您没有任何用户表单,“表单”将会丢失。可以扩展“模块”。根据需要单击 + 以展开“Microsoft Office Outlook Objects”:
- Project1 (VbaProject.OTM)
- Microsoft Office Outlook Objects
ThisOutlookSession
+ Forms
+ Modules
单击 ThisOutlookSession 。除非您已使用此代码区,否则模块区域将变为白色。此区域类似于模块,但具有其他权限。将此代码复制到该区域:
Private Sub Application_MAPILogonComplete()
' This event routine is called automatically when a user has completed log in.
Dim sentFolder As Outlook.MAPIFolder
Dim entryID As String
Dim i As Long
Set sentFolder = CreateObject("Outlook.Application"). _
GetNamespace("MAPI").GetDefaultFolder(olFolderSentMail)
For i = sentFolder.Items.Count To 1 Step -1
sentFolder.Items(i).Delete ' Move to Deleted Items
Next
Set sentFolder = Nothing
End Sub
我已经拿走了你的代码,整理了一下,然后把它放在一个事件例程中。发生适当的事件时会自动调用事件例程。用户完成登录后会调用此例程。这不是您所要求的,但可能是可接受的折衷方案。
建议2
我之前没有在“已发送邮件”文件夹上尝试过ItemAdd事件例程,尽管我已将其与收件箱一起使用。根据我的有限测试,删除发送的项目不会干扰发送。
此代码属于“ThisOutlookSession”。
Option Explicit
Public WithEvents MyNewItems As Outlook.Items
Private Sub Application_MAPILogonComplete()
Dim NS As NameSpace
Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")
With NS
Set MyNewItems = NS.GetDefaultFolder(olFolderSentMail).Items
End With
End Sub
Private Sub myNewItems_ItemAdd(ByVal Item As Object)
Debug.Print "--------------------"
Debug.Print "Item added to Sent folder"
Debug.Print "Subject: " & Item.Subject
Item.Delete ' Move to Deleted Items
Debug.Print "Moved to Deleted Items"
End Sub
Debug.Print语句显示您对发送项目的访问权限有限。如果您尝试访问更多敏感属性,则会向用户发出警告,指出宏正在评估电子邮件。