【问题标题】:How to call VBA code from Outlook then VBA code from Excel?如何从 Outlook 调用 VBA 代码,然后从 Excel 调用 VBA 代码?
【发布时间】:2015-03-04 05:54:11
【问题描述】:

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

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

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

  3. 将提取的电子邮件标记为“已读”

我的问题是:

  • 有没有办法自动运行代码(例如:在早上 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

【问题讨论】:

  • 嗨@Pepperito,我解决了你的问题吗?如果是,请单击旁边的复选符号将我的答案标记为“已接受”。谢谢。

标签: vba excel outlook


【解决方案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

【讨论】:

    【解决方案2】:

    How to automate Outlook from another program 文章可能对您有所帮助。本文概述了使用其他程序中的自动化对 Outlook 进行编程。

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      相关资源
      最近更新 更多