使用VBA将特定信息从Outlook 2003提取到Excel

时间:2013-08-05 08:27:05

标签: vba automation excel-2003 outlook-2003

首先,我对VBA很新,并且由于我收到的电子邮件数量遵循某个模板,我正在尝试自动化数据整理以避免当前所需的所有剪切和粘贴。我已经看了一些以前的问题,但由于我的知识很少,答案不够具体,我不能理解。

这些电子邮件中的每一封都来自特定的电子邮件地址,并具有如下所示的标准格式:

” dd / mm / yyyy hr.min.sec

xxx xxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxx“

我想将此信息导出或复制到excel 2003工作表,以便每条单独的信息都位于单行的新列中,其中每个电子邮件都是新行。 我希望宏能够在特定文件夹中搜索我收到的电子邮件(因为我已经在Outlook中设置了与此电子邮件地址相关的一些规则),从与模板匹配的每封电子邮件中复制信息并将其粘贴到一个excel工作表。然后,每次收到新电子邮件时,信息都会添加到已创建的表格的底部。

希望一切都有意义,如果您需要更多信息,请告诉我。

提前致谢。

2 个答案:

答案 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属性检查发件人,以确保发件人是正确的。

如果您提供更具体的信息,我可以修改代码。