Outlook在使用Excel VBA发送邮件时有时会崩溃
我在Excel中使用VBA代码执行以下操作:Outlook在使用Excel VBA发送邮件时有时会崩溃,excel,vba,outlook,Excel,Vba,Outlook,我在Excel中使用VBA代码执行以下操作: 检索订单请求 拉取SAP报告 验证订单请求 连接到SAP进行事务处理 发送电子邮件 循环(从#4)直到完成所有订单 在回复第二封电子邮件时,发送电子邮件部分可能有15%的时间崩溃。我可以通过确认以下错误继续自动化流程,重新启动Outlook,然后脚本继续运行,就像什么都没有发生一样 我想这可能是这个机器人的内存问题,因为只有这个机器人失败了。我确实理解,在代码点击End Sub之后,所有变量都应该从内存中清除 该代码仅用于应答。它在SAP事务完成后
End Sub
之后,所有变量都应该从内存中清除
该代码仅用于应答。它在SAP事务完成后被调用
Sub-EmailReply()
Application.ScreenUpdating=False
呼叫开放关税
Dim olApp作为Outlook.Application
将命名空间设置为Outlook.Namespace
将对象所有者设置为Outlook.Recipient
将拓扑文件夹设置为Outlook.MAPIFolder
以Outlook.MailItem的形式发送邮件
我想我会坚持多久
将wdDoc设置为Word.Document
Dim EmailAddress作为对象
Dim fdr_未作为Outlook.MAPIFolder处理
Dim fdr_挂起为Outlook.Mapi文件夹
作为Outlook.Mapi文件夹处理的Dim fdr_
设置myNameSpace=Outlook.Application.GetNamespace(“mapi”)
Set objOwner=myNameSpace.CreateRecipient(“retailrma@company.com")
解决问题
如果是objOwner,那么解决了
Set topOlFolder=myNameSpace.GetSharedDefaultFolder(objOwner,olFolderInbox)
如果结束
设置fdr_Unprocessed=topOlFolder.Folders(“RMA-未处理”)
设置fdr_Pending=topOlFolder.Folders(“RMA-Pending”)
设置fdr_Processed=topOlFolder.Folders(“RMA-已处理”)
对于fdr_中的每个oLMail未处理项
如果(oLMail.Subject=范围(“电子邮件主题”)。文本和格式(oLMail.ReceivedTime,“中间时间”)=格式(范围(“电子邮件日期”)。文本,“中间时间”)和oLMail.SenderEmailAddress=范围(“电子邮件地址”)。文本)_
或者(oLMail.Subject=范围(“电子邮件主题”)。文本和格式(oLMail.ReceivedTime,“中间时间”)=格式(范围(“电子邮件日期”)。文本,“中间时间”))
'如果可以找到电子邮件,则回复电子邮件或发送电子邮件
'将电子邮件模板工作表上的副本范围定义为word文档
暗拷贝范围作为范围
'Set wdDoc=oLMail.GetInspector.WordEditor
“确定是否应以英语或法语回复电子邮件
如果范围(“电子邮件语言”)=“En”,则
第一行=3
第一列=3
LastRow=246
LastColumn=9
ElseIf范围(“电子邮件语言”)=“Fr”然后
第一行=3
第一列=11
LastRow=246
LastColumn=16
如果结束
工作表(“电子邮件模板”)。选择
工作表(“电子邮件模板”)。范围(单元格(第一行,第一列),单元格(最后行,最后列))。自动筛选字段:=1,标准1:=“显示”
Set replyll=oLMail.replyll
设置EmailAddress=范围(“电子邮件地址”)
设置CopyRange=范围(单元格(第一行,第一列),单元格(最后行,最后列))。特殊单元格(xlCellTypeVisible)
'没有电子邮件地址时的错误处理
如果EmailAddress=0,则
RMAStatus=“无效的电子邮件地址”
Application.ScreenUpdating=True
出口接头
如果结束
答复
.To=电子邮件地址
.CC=”retailrma@company.com"
.展示
.BodyFormat=olFormatHTML
设置wdDoc=oLMail.GetInspector.WordEditor
复制范围,复制
wdDoc.Application.Selection.PasteAndFormat Type:=WDFormatOriginalFormat'将已批准/未批准的IMEI粘贴到outlook回复电子邮件中
.发送
以
'将电子邮件移动到已处理的文件夹
oLMail.Move fdr_已处理
'重置电子邮件模板
工作表(“电子邮件模板”)。范围(单元格(第一行,第一列),单元格(最后行,最后列))。自动筛选字段:=1
转到ExitSendEmail
如果结束
下一封邮件
ExitSendEmail:
Application.ScreenUpdating=True
端接头
首先,确保在代码中正确定义了所有对象:
Dim oLNameSpace As Outlook.Namespace
但在代码的后面部分使用了另一个对象:
Set myNameSpace = Outlook.Application.GetNamespace("mapi")
另一个可能的薄弱环节是用于编辑电子邮件的Word对象模型
Set wdDoc = oLMail.GetInspector.WordEditor
尝试改用MailItem
类的属性
您还可以在每次迭代之间添加延迟。有关更多信息,请参阅函数。下面的示例使用定时器
功能暂停应用程序。该示例还使用DoEvents
在暂停期间让位于其他进程
Dim PauseTime, Start, Finish, TotalTime
If (MsgBox("Press Yes to pause for 5 seconds", 4)) = vbYes Then
PauseTime = 5 ' Set duration.
Start = Timer ' Set start time.
Do While Timer < Start + PauseTime
DoEvents ' Yield to other processes.
Loop
Finish = Timer ' Set end time.
TotalTime = Finish - Start ' Calculate total time.
MsgBox "Paused for " & TotalTime & " seconds"
Else
End
End If
Dim暂停时间、开始、完成、总时间
如果(MsgBox(“按Yes暂停5秒”,4))=vbYes,则
暂停时间=5'设置持续时间。
开始=计时器“设置开始时间。
定时器<启动+暂停时间时执行
DoEvents对其他流程的产量。
环
完成=定时器设置结束时间。
TotalTime=完成-开始'计算总时间。
MsgBox“暂停时间”&总时间和“秒”
其他的
终点
如果结束
可能不相关,但工作表(“电子邮件模板”)。范围(单元格(第一行,第一列),单元格(最后行,最后列))。自动筛选字段:=1
为。您需要为内部单元格调用限定工作表。您所说的“Outlook崩溃”是什么意思?您是否看到运行时错误?或者Outlook应用程序死掉了?你有不同的v