如何从Outlook调用VBA代码然后从Excel调用VBA代码?

时间:2015-03-04 05:54:11

标签: vba excel-vba outlook excel

我有一个需要Outlook和Excel连接的项目。我需要的是:

  1. 从Outlook收件箱中提取未读电子邮件的数据(收到日期,发件人,主题),然后粘贴到Excel中。请参阅以下代码。

  2. 将数据粘贴到Excel后,格式化提取的数据(我已经在Excel中有代码),然后保存Excel文件。

  3. 将提取的电子邮件标记为"阅读"

  4. 我的问题是:

    • 有没有办法自动运行代码(例如:早上7点,下午2点和早上6点运行)?

    • 如何将电子邮件设置为"阅读"提取信息后?

    • 我如何仅选择"未读"要提取的电子邮件?

    • 如何将Outlook代码连接到Excel代码并自动运行?

    Outlook中用于提取数据的代码:

    Sub Extract()
    Set myOlApp = Outlook.Application
    Set mynamespace = myOlApp.GetNamespace("mapi")
    Set myfolder = myOlApp.ActiveExplorer.CurrentFolder
    Set xlobj = CreateObject("Excel.Application")
    xlobj.Visible = True
    xlobj.workbooks.Add
    'Set Heading
    xlobj.Range("a" & 1).Value = "Received time"
    xlobj.Range("b" & 1).Value = "Subject"
    xlobj.Range("c" & 1).Value = "Importance"
    xlobj.Range("d" & 1).Value = "Sender"
    For i = 1 To myfolder.Items.Count
        Set myitem = myfolder.Items(i)
        xlobj.Range("a" & i + 1).Value = myitem.ReceivedTime
        xlobj.Range("b" & i + 1).Value = myitem.Subject
        xlobj.Range("c" & i + 1).Value = myitem.Importance
        xlobj.Range("d" & i + 1).Value = myitem.SenderName
    Next
    End Sub
    

2 个答案:

答案 0 :(得分:1)

有没有办法让我自动运行宏(例如:在上午7点,下午2点和早上6点运行宏)?

未内置于Excel中。您可以在Windows(附件 - >系统工具 - >任务计划程序)中尝试计划任务来打开Excel文件(包括文件路径和名称的参数)。打开时,您需要让Excel运行该宏(右键单击,然后"查看代码"添加):

Private Sub Workbook_Open()
    Call MacroThatYouWantToRun()
End Sub

更多详情 - > http://support.microsoft.com/kb/265113

我不确定这在Outlook中是否可以轻松完成。也许这会有所帮助:Outlook VBA - Run a code every half an hour

如何将电子邮件设置为"阅读"提取信息后?

Outlook项目显然有一个" .UnRead"属性。对于要标记为已读的项目,只需将其设置为False即可。

我将如何仅选择"未读"要提取的电子邮件?

我不是专家,但最糟糕的情况是,您可以循环浏览所有文件夹项并检查每个项目的属性。如果.UnRead属性设置为True,则执行命令,即将其某些属性复制到Excel。

此外:此处已讨论过运行Outlook文件夹中所有项目的方法:

如何将Outlook宏连接到我的Excel宏并自动运行?

我认为没必要。您可以从另一个应用程序访问一个应用程序 - 就像您在示例中所做的那样(Outlook - > Excel)。如果你想反过来(Excel - > Outlook),请考虑以下内容:

' This is running in Excel, not Outlook
Dim objOutlook As Object
Set objOutlook = CreateObject("Outlook.Application")
With objOutlook
    ' Specify the commands you want to run in Outlook
End With

如果您想坚持从Outlook运行宏,请尝试更改您的代码

' First line in Excel you want the copied data to go
Dim ExcelCount As Integer
ExcelCount = 1

For i = 1 To myfolder.Items.Count
Set myitem = myfolder.Items(i)
   ' Only copy data from unread items
   If myitem.UnRead = True Then
      xlobj.Range("a" & ExcelCount).Value = myitem.ReceivedTime
      xlobj.Range("b" & ExcelCount).Value = myitem.Subject
      xlobj.Range("c" & ExcelCount).Value = myitem.Importance
      xlobj.Range("d" & ExcelCount).Value = myitem.SenderName

      ' After copying the information, mark item as read
      myitem.UnRead = False

      ' Increase Excel line count
      ExcelCount = ExcelCount + 1
   End If
Next

答案 1 :(得分:0)

您可能会发现How to automate Outlook from another program文章很有帮助。本文概述了使用自动化从另一个程序对Outlook进行编程。