【问题标题】:Reference Outlook folder from Excel从 Excel 引用 Outlook 文件夹
【发布时间】:2017-01-05 00:58:47
【问题描述】:

我创建了一个宏来读取 Outlook 电子邮件并将值和标题(发送的主题时间等)提取到 Excel。

这之前可以工作,但现在提示错误“尝试的操作失败。找不到对象”。

文件夹的位置是“收件箱/TIBCO 报告文件夹”。错误提示在

Set olFolder = olFolder.Folders(1).Folders("Inbox").Folders("TIBCO Reports Folder")

下面是部分代码:

Dim olApp As Object
Dim olFolder As Object
Dim olMailItem As Object

Dim strTo As String
Dim strFrom As String
Dim dateSent As Variant
Dim dateReceived As Variant
Dim strSubject As String
Dim strBody As String

Dim date1 As Date
Dim date2 As Date

Dim loopControl As Variant
Dim mailCount As Long
Dim totalItems As Long
 '-------------------------------------------------------------

 '//Turn off screen updating
Application.ScreenUpdating = False

 '//Clearing worksheet content
 'Sheets("OutlookEmail").Cells.Clear

 '//Setup headers for information
Sheets("OutlookEmail").Select
Range("A1:F1").Value = Array("Subject", "From", "Date/Time Sent", "Date/Time Received", "To", "Attachment")

 '//Format columns E and F to
Columns("C:D").EntireColumn.NumberFormat = "MM/DD/YYYY HH:MM:SS"

 '//Create instance of Outlook
Set olApp = CreateObject("Outlook.Application")

 '//Select folder to extract mail from
Set olFolder = olApp.GetNamespace("MAPI")
Set olFolder = olFolder.Folders(1).Folders("Inbox").Folders("TIBCO Reports Folder")

【问题讨论】:

  • NamespaceFolder 对象使用olFoder 变量对我来说看起来很可疑。我建议为每一个创建一个单独的对象变量。 (使用内置智能感知也可以使用早期绑定也有助于调试)。
  • 嗨,斯科特,我不知道这个建议是否可行。该代码以前可以运行,并且能够从 Outlook 文件夹中获取和阅读电子邮件。你能告诉我你的建议吗?因为我对 VBA 宏编码不是很熟悉。谢谢
  • 您是从 Excel 还是 Outlook 运行 vba?
  • 查看this answer 中的代码以了解我在说什么。在网络上搜索您感到困惑的任何方法。一个简单的搜索将揭示丰富的信息。那里的答案使用早期绑定。
  • 嗨 Om3r,我正在 Excel 中运行 vba。

标签: excel vba outlook


【解决方案1】:

当您在 Excel 中使用 Outlook 时,请像这样设置您的 Outlook 收件箱引用。

Option Explicit
Public Sub Example()
    Dim olApp As Outlook.Application
    Dim olNS As Outlook.Namespace
    Dim Inbox As Outlook.MAPIFolder
    Dim Items As Outlook.Items
    Dim i As Long

    '// Ref to Outlook Inbox
    Set olApp = New Outlook.Application
    Set olNS = olApp.GetNamespace("MAPI")
    Set Inbox = olNS.GetDefaultFolder(olFolderInbox).Folders("Folder Name")

    Set Items = Inbox.Items

    For i = Items.count To 1 Step -1
        Debug.Print Items(i) '
'       do something with Items
    Next
End Sub

确保在 VBE 的 Tools>Reference 菜单中设置 Microsoft Outlook Object XX.X

在此处查看另一个示例https://stackoverflow.com/a/40356349/4539709

【讨论】:

  • 这似乎是一种比依赖确切名称更原则的方式。
【解决方案2】:

不是答案,而是一种调试策略,太长而无法作为评论发布。

一行

Set olFolder = olFolder.Folders(1).Folders("Inbox").Folders("TIBCO Reports Folder")

很难调试。每个点 (.) 都会尝试访问一个属性。其中一项尝试失败了。你不知道是哪一个,因为一共有三个。

你可以做的是逐行替换那一行

Set oFolder = olFolder.Folders(1)
Set oFolder = olFolder.Folders("Inbox")
Set oFolder = olFolder.Folders("TIBCO Reports Folder")

这三行之一将失败。看看哪一个可以让您专注于调试工作。

【讨论】:

  • 谢谢约翰。我在 Set oFolder = olFolder.Folders("Inbox") 失败了
  • @jsioson 错字?也许是"In Box"?无论出于何种原因,Folders(1) 缺少一个名为 "Inbox" 的文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多