我正在开发一个 vba 宏来提取每天在指定电子邮件地址发送给我的电子邮件中包含的文本,我想生成一个在到达时触发的 vba 宏。文本需要保存到文本文件“c:\temp\email.txt”
我整理了各种代码,但没有什么真正起作用。
谁能建议一个简单的 vba 方法来做到这一点?
您可能会发现我对如何使用 VBA 或宏将 Outlook 邮件消息复制到 excel 中的答案为您提供了一个开始。
该答案显示了如何运行收件箱,从每封电子邮件中提取选定的信息,包括发件人、主题和正文。以此作为开始,您可以编写一个宏,在收件箱中搜索感兴趣的电子邮件并将其导出到文本文件。
你真正想要的是一个事件例程,当一个项目被添加到收件箱时触发,但它更高级,所以让一个搜索收件箱的宏首先工作。
Outlook 具有强大的安全系统,因此当您运行搜索宏时,您会发现您必须授予它访问电子邮件的权限。您可以自行验证自己的宏,但我从来没有完成抑制“A 宏正在访问您的电子邮件”消息的最后一步。如果您每天运行一次宏,则授予权限不是问题,但如果您想要一个事件例程,则必须每 10 分钟确认一次权限。
访问以下网站以获取信息或在其他地方寻求帮助:
我可以得到第一个工作的说明,但不能得到第二个工作的说明。
如果您可以破解 Manage Trusted Root Certificates 问题,添加事件例程并不困难。在 Outlook 的 Visual Basic 编辑器中,项目资源管理器将如下所示:
- Project1(VbaProject.OTM)
+ Microsoft Office Outlook Objects
+ Forms
+ Modules
根据需要单击加号以获得:
- Project1(VbaProject.OTM)
- Microsoft Office Outlook Objects
* ThisOutlookSession
+ Forms
+ Modules
选择ThisOutlookSession
。这就像一个模块,但具有额外的权限。将下面的代码复制到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(olFolderInbox).Items
End With
End Sub
Private Sub myNewItems_ItemAdd(ByVal Item As Object)
Dim text As String
Debug.Print "--------------------"
Debug.Print "Item added to Inbox"
With Item
Debug.Print "Subject: " & .Subject
Debug.Print "Sender name: " & .SenderName
Debug.Print "Sender address: " & .SenderEmailAddress
text = Mid(.Body, 1, 100)
text = Replace(text, vbLf, "{lf}")
text = Replace(text, vbCr, "{cr}")
text = Replace(text, vbTab, "{tb}")
text = Replace(text, Chr$(160), "{nbsp}")
Debug.Print "Start of body: " & text
End With