excel - 使用 VB/VBA 搜索 Outlook 邮件并将特定数据提取到 Excel 工作表中

标签 excel vba outlook

首先,我是一个从头开始工作的 VB 新手,但过去编辑过一些代码。我能找到的最接近我的问题是 this one但它并不像我希望的那么具体。

我正在使用 Outlook/Excel 2007,并且每天都会收到一封电子邮件,其中包含一些固定格式的数据。我希望做的是设置一个宏/脚本来搜索我的 Outlook 收件箱,然后根据正确的邮件主题,查看邮件正文并将某些部分提取到 Excel 工作表中。

根据我的知识,我认为 VB 可能是实现此目的的最佳方法,但我不太确定从哪里开始。任何有关代码的一般结构或其他类似示例的帮助将不胜感激。只是想开始,并希望自己能弄清楚以供将来的练习。谢谢!

<小时/>

非常感谢您的帮助!我基本上已经完成了这个工作,只是当我收到新消息时无法让它自动更新。我设置了一条规则,将相关电子邮件移动到自己的文件夹中,并且我能够设置一个可以运行的公共(public)宏,该宏可以提取所有数据(针对每封电子邮件)并将它们转储到 .csv 文件中。

我尝试将该宏调整到您上面发布的示例中,当我收到新消息时,该示例应该自动运行,但我还没有成功。电子邮件的解析不应改变(并且在手动运行的宏中肯定有效),所以这很好,它只是让自动更新宏在新消息上运行。我错过了什么吗?这是我得到的,除了新文件夹(并且是一个类模块)之外,它与上面的示例基本相同:

Public WithEvents myOlItems As Outlook.Items


Public Sub Application_Startup()

   ' Reference the items in the Inbox. Because myOlItems is declared
   ' "WithEvents" the ItemAdd event will fire below.
   Set myOlItems =  Outlook.Session.GetDefaultFolder(olFolderInbox).Folders("FolderX").Items


End Sub

Private Sub myOlItems_ItemAdd(ByVal Item As Object)

Dim objOutlook As New Outlook.Application
Dim objNameSpace As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim objMail As MailItem
Dim count As Integer
Dim myTitlePos As Integer
Dim myTitleLen As Integer
Dim myVarPos As Integer
Dim myVarLen As Integer
Dim strPrice As String
Dim strYear As String
Dim myVarCRLF As Integer
Dim myDate As Date
Dim newLineTest As String


  ' Check to make sure it is an Outlook mail message, otherwise
  ' subsequent code will probably fail depending on what type
  ' of item it is.

  If TypeName(Item) = "MailItem" Then

  ' Data processing and parsing is done here

End Sub

最佳答案

VB 可能是解决您的问题最简单的语言,因为您对这一切都是新手,而 VBA(Visual Basic for Applications)是解决特定问题的最简单且最具互操作性的语言。

您需要首先创建一个新的 Outlook 宏,每当新邮件到达收件箱时就会触发该宏。

首先在 Outlook 中创建一个新的类模块 (ALT-F11) 并复制以下代码:

Public WithEvents myOlItems As Outlook.Items


Public Sub Application_Startup()

   ' Reference the items in the Inbox. Because myOlItems is declared
   ' "WithEvents" the ItemAdd event will fire below.
   Set myOlItems = Outlook.Session.GetDefaultFolder(olFolderInbox).Items

End Sub


Private Sub myOlItems_ItemAdd(ByVal Item As Object)

      ' Check to make sure it is an Outlook mail message, otherwise
      ' subsequent code will probably fail depending on what type
      ' of item it is.
      If TypeName(Item) = "MailItem" Then

        If Item.Subject = "My Required Subject Line" Then

        ' Here's where you want to do some stuff.

        End If

      End If


End Sub

下一部分是打开 Excel 并执行您想做的任何操作。请务必使用“工具:引用...”菜单项并选择 Microsoft Excel xx.xx 对象库来建立对 Excel 对象库的引用。

您可能需要如下代码:

Private Sub Do_Excel_Stuff(MyContent As Object)
Dim myXLApp As Excel.Application
Dim myXLWB As Excel.Workbook

    Set myXLApp = New Excel.Application
    Set myXLWB = New Excel.Workbook


    ' Do your data processing here


    Set myXLWB = Nothing
    Set myXLApp = Nothing


End Sub

这可能会在您的 myOlItems_ItemAdd 方法中调用。

在 Google 或 Stack Overflow 上查找一下应该可以为您提供足够的指导,帮助您了解如何处理 Excel 方法的实际数据处理部分。

希望这足以帮助您入门。

关于excel - 使用 VB/VBA 搜索 Outlook 邮件并将特定数据提取到 Excel 工作表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5826158/

相关文章:

python - Xlsxwriter 计数/求和函数

vba - 简单范围上的应用程序定义错误

vba - 查找并删除行而不是列中的重复单元格

vba - 如何通过 MS 项目中的循环迭代所有行和列

VBA - https响应文本解密

Excel/CSV - 将键值转换为 csv

excel - 使用复制目标和选择性粘贴来保持格式

html - 在 html 电子邮件中显示水平规则的背景颜色

javascript - 屏幕截图和 Outlook 电子邮件附件 - Javascript 实现

vba - 回复收件箱中突出显示的电子邮件、向特定电子邮件添加密件抄送以及直接回复特定电子邮件