Excel 对象变量或with block variable not set错误发生在for循环的第二次迭代中

Excel 对象变量或with block variable not set错误发生在for循环的第二次迭代中,excel,vba,outlook,Excel,Vba,Outlook,我在outlook中使用以下代码从电子邮件列表下载附件 代码在循环的第一次迭代中运行良好,但在第二次迭代中,它在尝试将文件保存到桌面上的临时文件夹的步骤中出现了运行时错误“91”对象变量或块变量未设置的错误(即行wb.SaveAs FileFormat:=51,文件名:=xlNameAndPath) 通过阅读文档和一些测试,似乎问题实际上是由wb.close在循环的第一次迭代中引起的,这将wb设置为零,然后在第二次迭代中导致错误 如果我是对的,那么我的问题是如何“重新指定对象变量的引用” Sub

我在outlook中使用以下代码从电子邮件列表下载附件

代码在循环的第一次迭代中运行良好,但在第二次迭代中,它在尝试将文件保存到桌面上的临时文件夹的步骤中出现了运行时错误“91”对象变量或块变量未设置的错误(即行
wb.SaveAs FileFormat:=51,文件名:=xlNameAndPath

通过阅读文档和一些测试,似乎问题实际上是由
wb.close
在循环的第一次迭代中引起的,这将
wb
设置为零,然后在第二次迭代中导致错误

如果我是对的,那么我的问题是如何“重新指定对象变量的引用”

Sub SaveExcels()
将objNS设置为Outlook.NameSpace:Set objNS=GetNamespace(“MAPI”)
将文件夹设置为Outlook.MAPIFolder
设置olFolder=objNS.GetDefaultFolder(olFolderInbox)
将项目变暗为对象
作为Outlook.Attachments的Dim OBJAAttachments
用于文件夹中的每个项目。项目
如果项目类型为Outlook.MailItem,则
将oMail设置为Outlook.MailItem:设置oMail=Item
'检查是否包含附件
Set objAttachments=oMail.Attachments
lngCount=objAttachments.Count
“从正确的公司检查它
senderCheck=InStr(oMail.SenderEmailAddress,“company.com”)
'检查电子邮件类型是否正确
subjectCheck=InStr(oMail.Subject,“TYPE”)
检查是否是最近几周的数据
receivedDate=DateValue(oMail.ReceivedTime)
todaysDate=DateValue(现在为())
dateDifference=todaysDate-receivedDate
如果lngCount>0,senderCheck>0,subjectCheck>0,dateDifference我相信

Dim wb As Workbook
Set wb = xlApp.Workbooks.Open(strFolderpath & xlNameTemp)

我会做这项工作的。(未测试-YMMV!)

在“Set wb=ActiveWorkbook”中,能否使用调试器查看ActiveWorkbook是否有效?(顺便说一句,ActiveWorkbook首先在哪里定义?@SandyGettings我假设Sam添加了对类型库的引用,“Microsoft Excel对象库”(VBA编辑器,工具|引用)。这使得
Workbook
和类似类型在
Dim
语句中可见。它还提供了
ActiveWorkbook
global,以及
ActiveSheet
xl*
常量。
Dim wb As Workbook
Set wb = xlApp.Workbooks.Open(strFolderpath & xlNameTemp)