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



我有一个项目需要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

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

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

Private Sub Workbook_Open()
    Call MacroThatYouWantToRun()
End Sub

更多详细信息-->http://support.microsoft.com/kb/265113

我不确定这是否能像Outlook中那样轻松。也许这有帮助:Outlook VBA-每半小时运行一次代码

提取信息后,我将如何将电子邮件设置为"已读"

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

如何只选择要提取的"未读"电子邮件

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

此外:在Outlook文件夹中运行所有项目的方法之前已经在这里讨论过:

  • 我可以在包括子文件夹在内的文件夹中遍历所有Outlook电子邮件吗
  • 迭代特定Outlook文件夹中的所有电子邮件项目
  • outlook vba选择子文件夹中的消息

如何将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

您可能会发现另一篇程序文章中的"如何自动化Outlook"很有帮助。这篇文章提供了从另一个程序使用Automation对Outlook进行编程的概述。

最新更新