首先,我对VBA很新,并且由于我收到的电子邮件数量遵循某个模板,我正在尝试自动化数据整理以避免当前所需的所有剪切和粘贴。我已经看了一些以前的问题,但由于我的知识很少,答案不够具体,我不能理解。
这些电子邮件中的每一封都来自特定的电子邮件地址,并具有如下所示的标准格式:
” dd / mm / yyyy hr.min.sec
xxx xxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxx“
我想将此信息导出或复制到excel 2003工作表,以便每条单独的信息都位于单行的新列中,其中每个电子邮件都是新行。 我希望宏能够在特定文件夹中搜索我收到的电子邮件(因为我已经在Outlook中设置了与此电子邮件地址相关的一些规则),从与模板匹配的每封电子邮件中复制信息并将其粘贴到一个excel工作表。然后,每次收到新电子邮件时,信息都会添加到已创建的表格的底部。
希望一切都有意义,如果您需要更多信息,请告诉我。
提前致谢。
答案 0 :(得分:0)
我最近做了一些与此类似的事情,除了我已将其输入访问数据库而不是excel表,但想法是一样的。出于某种原因,我无法使用规则来运行它,但我总是发现我可以从手动运行的宏中更好地控制它。因此,使用规则将所有内容放入文件夹,并在其下创建一个AlreadyProcessed子文件夹。以下是一些代码:
Sub process()
Dim i As Integer, folder As Object, item As Object
With Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Folders("YourFolderName")
For Each item In .Items
processMail item
item.Move .Folders("AlreadyProcessed")
Next
End With
End Sub
Sub processMail(item As Outlook.MailItem)
Dim bitsOfInformation() As String
bitsOfInformation = Split(item.Body, " ")
'Use this information to make an Excel file
End Sub
从VBA制作Excel文件非常简单 - 只需阅读打开excel并从其他Office程序VBA创建新文档 - 您正在寻找Excel.Application
。您甚至可以在Excel中记录宏,手动填充信息,基本上将代码复制到Outlook中,并用变量替换硬编码信息。但是,如果你要在成千上万的电子邮件中运行它,请注意记录的宏(使用选择对象)是低效的。
答案 1 :(得分:0)
从以下代码开始:
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Set Items = GetItems(GetNS(GetOutlookApp), olFolderInbox)
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
On Error GoTo ErrorHandler
Dim msg As Outlook.MailItem
If TypeName(item) = "MailItem" Then
Set msg = item
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
Function GetItems(olNS As Outlook.NameSpace, folder As OlDefaultFolders) As Outlook.Items
Set GetItems = olNS.GetDefaultFolder(folder).Items
End Function
Function GetNS(ByRef app As Outlook.Application) As Outlook.NameSpace
Set GetNS = app.GetNamespace("MAPI")
End Function
Function GetOutlookApp() As Outlook.Application
Set GetOutlookApp = Outlook.Application
End Function
这会在默认收件箱中设置事件侦听器。只要收到电子邮件消息,就会执行If TypeName
语句中的代码。现在只需要运行什么代码即可。
您可以使用.SenderName
或.SenderEmailAddress
属性检查发件人,以确保发件人是正确的。
如果您提供更具体的信息,我可以修改代码。