【问题标题】:VBA can't find emails in outlook using .FindVBA 无法使用 .Find 在 Outlook 中找到电子邮件
【发布时间】:2017-01-05 14:45:44
【问题描述】:

我创建了一个在我的计算机上运行良好的宏。当我上传并在另一台计算机上运行它时,它找不到任何电子邮件。

Set olApp = GetObject(, "Outlook.Application")
Set olNs = olApp.GetNamespace("MAPI")
Set olFldr = olNs.GetDefaultFolder(olFolderInbox)
Set olItms = olFldr.Items
Set olEmail = olApp.CreateItem(olMailItem)


 Set OutApp = CreateObject("Outlook.Application")
 Set OutMail = OutApp.CreateItem(0)


            subj = "Test email"

                Set olMi = olItms.Find("[Subject] = " & Chr(34) & subj & Chr(34))
              If Not (olMi Is Nothing) Then
                        For Each olAtt In olMi.Attachments
              Else
                  ' ends up here everytime

我给自己发了一封名为“测试电子邮件”的电子邮件,我可以在我的 Outlook 收件箱中看到它,但我的宏永远找不到它(在我将宏上传到的任何计算机上)。但是,当我在编写程序的原始计算机上运行程序时,它运行良好。不太确定是什么问题。

【问题讨论】:

  • 查看代码似乎没问题。我会测试以确保主题实际上是“测试电子邮件”。尝试遍历每个邮件项目并打印出主题行以确保它似乎没有找到它。
  • 电脑有什么区别?您是如何将代码从您的计算机传输到另一台的?
  • @Om3r - 我通过电子邮件发送了它。我还将它放在下拉框中,以便通过多台计算机访问它。唯一真正的区别是一台电脑是戴尔,另一台是惠普。操作系统相同,Microsoft Office 2013 都在两者上。
  • 更新:我检查了宏的 Outlook 安全设置,所有引用都在 excel 中匹配,但它仍然找不到包含我的 vba 宏的电子邮件。我什至从头开始一个项目来测试它,但仍然一无所获。真的不确定这个问题。

标签: excel vba outlook


【解决方案1】:

尝试搜索 PR_NORMALIZED_SUBJECT MAPI 属性:

set olMi = olItms.Find("@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0E1D001F"" = '" & subj & "'")

【讨论】:

  • 谢谢。我对 VBA 的经验有点有限。这行代码到底在做什么?
  • 它正在搜索 PR_NORMALIZED_SUBJECT 属性而不是 PR_SUBJECT(未编入索引)。由于 PR_NORMALIZED_SUBJECT 没有通过 OOM 公开,所以需要在双引号中指定属性 DASL 属性名,并在查询前加上“@SQL=”。
猜你喜欢
  • 2020-09-28
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2011-08-24
相关资源
最近更新 更多