【发布时间】:2022-09-28 05:21:49
【问题描述】:
此代码旨在根据逻辑检查是否在用户在单元格 C6 中指定的日期之后收到邮件项来下载 Outlook 电子邮件附件。
单步执行代码表明它根本没有检查逻辑。代码读取下面的代码行,就好像它检查邮件项目本身一样(即在 01/01/01 代码收到的邮件项目说如果 mailitem=01/01/01 那么)当然邮件项目总是满足这个检查
If MailItem.ReceivedTime >ThisWorkbook.Worksheets(\"Email_Info\").Range(\"C6\").Value Then
任何有关确保逻辑测试有效的帮助都会有所帮助。我可以在同一代码中引用工作簿和 Outlook 吗?
如果有帮助,其余代码如下
Option Explicit
Sub Download_Outlook_Attachemtns()
Dim olAPP As Outlook.Application
Dim olNS As Outlook.Namespace
Dim olFolder As Outlook.MAPIFolder
Dim olItem As Object
Dim MailItem As Outlook.MailItem
Dim olAtt As Outlook.Attachment
Set olAPP = New Outlook.Application
Set olNS = olAPP.getnamespace(\"MAPI\")
\'single folder link to hidden sheet folders([admin].[Mailbox].text)
Set olFolder = olNS.Folders(\"John@work.com\")
Set olFolder = olFolder.Folders(\"Inbox\")
Set olFolder = olFolder.Folders(\"Work Requests\")
For Each olItem In olFolder.Items
If olItem.Class = olMail Then
Set MailItem = olItem
For Each olAtt In MailItem.Attachments
If MailItem.ReceivedTime > ThisWorkbook.Worksheets(\"Email_Info\").Range(\"C6\").Value Then
olAtt.SaveAsFile (\"C:\\Users\\John Smith\\Desktop\\WOR Email Download\") & olAtt.Filename
End If
Next olAtt
End If
Next olItem
End Sub
-
转到具有
If条件的行并按 F9 切换断点,然后运行代码。当断点命中时,按 Ctrl+G 调出即时工具窗口然后键入?mailitem.receivedtime, ThisWorkbook.Worksheets(\"Email_Info\").Range(\"C6\").Value以输出正在比较的两个值。它打印出您期望的内容吗? -
谢谢你的建议。因此,对于日期为 C6 VBA 正在读取正确的日期。出于某种原因,邮件项目是从随机电子邮件开始的。我的印象是这个脚本将从最新的电子邮件开始并按顺序进行。但是,当我在“Set MailItem=olItem”处建立中断时,MailItem 对象似乎以随机顺序循环。
-
您需要比较两个日期对象,但在 Excel 中您似乎得到了一个字符串。