我有一个给用户发送电子邮件的工作簿。它有一个测试模式,这样电子邮件就会发送到我的邮箱。
对于每个用户,我在名为“canvas”的工作表中生成一条特定消息,然后使用以下代码发送它:
Private Sub sendEmail(sendOnBehalfOf As String, email As String, emailCC As String, subject As String)
ActiveWorkbook.EnvelopeVisible = True
With ActiveSheet.MailEnvelope
.Item.SentOnBehalfOfName = sendOnBehalfOf
.Item.To = email
.Item.cc = emailCC
.Item.subject = subject
.Item.Send
End With
End Sub
大约30-40封电子邮件后,我收到一个错误:
运行时错误“-2147417856(80010100)”:
由于网络或其他通信问题,操作失败.请验证您得连接,然后重试.
所有的电子邮件都发送到我的电子邮件,因为我正在测试。
一些观察结果:
- 在失败之前发送的电子邮件数量通常是相同的
- 代码开始时较快,然后开始变慢
- 当我开始在Outlook中接收电子邮件时,宏失败时似乎相关
- 我想这可能是代码运行太快的MailEnvelope跟不上,所以我已经在多个地方添加了睡眠点,但错误仍然发生
3条答案
按热度按时间ajsxfq5m1#
我知道,当我自动化InternetExplorer的繁重循环时,如果我不在子函数的末尾添加一个ojbIE.quit语句,代码会变慢很多,以至于代码会失败,因为它有45个IE进程在后台打开。也许添加一些类似的东西会帮助代码保持快速运行。
如果这样做还不行,我就把
.Send
命令改为.Display
,然后手动单击send按钮,或者添加一个SendKeys
命令,以这种方式“发送”电子邮件,看看这是否能阻止错误的发生。只要在代码中有适当的“wait”命令,SendKeys函数就应该能正常工作。bnl4lu3b2#
在行.项.发送后放置一个DoEvents
rjzwgtxy3#
我在过去有同样的错误,通过这个代码(电子邮件在循环)你是洪水你的电子邮件客户端,然后你得到的错误。
我对这个问题的解决方案是添加一个暂停后发送电子邮件从1到5秒使用:
Application.Wait Now + #12:00:01 AM#
或者你可以放一个计数器,在10封左右的电子邮件后暂停。