Excel 存储由工作簿触发的电子邮件。关闭,直到internet连接可用时可以发送为止
我开发了一个VBA程序,使用CDO代码从Office365电子邮件帐户发送电子邮件 邮件由Excel 存储由工作簿触发的电子邮件。关闭,直到internet连接可用时可以发送为止,excel,vba,office365,Excel,Vba,Office365,我开发了一个VBA程序,使用CDO代码从Office365电子邮件帐户发送电子邮件 邮件由工作簿.close事件触发 它需要一个活动的internet连接。在没有internet连接的情况下,它会抛出一条错误消息 如果internet连接不可用,则必须关闭工作簿,并且撰写的邮件必须存储在发件箱/草稿中,或者以任何其他可能的方式存储在Office365帐户中,以便在internet连接可用时发送 Sub-send_-mails1() Dim OBJ消息、objConfig、字段 Applicati
工作簿.close
事件触发
它需要一个活动的internet连接。在没有internet连接的情况下,它会抛出一条错误消息
如果internet连接不可用,则必须关闭工作簿,并且撰写的邮件必须存储在发件箱/草稿中,或者以任何其他可能的方式存储在Office365帐户中,以便在internet连接可用时发送
Sub-send_-mails1()
Dim OBJ消息、objConfig、字段
Application.DisplayAlerts=False
Application.ScreenUpdating=False
Set objMessage=CreateObject(“CDO.Message”)
设置objConfig=CreateObject(“CDO.Configuration”)
设置字段=对象配置字段
设置wb=ThisWorkbook
设置ws01=wb.工作表(“DB_1”)
datedifferance=ws01.Cells(Rows.Count,10).End(xlUp).Row
有田地
.项目(”http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.项目(”http://schemas.microsoft.com/cdo/configuration/smtpserver“”=“smtp.office365.com”
.项目(”http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.项目(”http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.项目(”http://schemas.microsoft.com/cdo/configuration/sendusername") = "from@domain.com"
.项目(”http://schemas.microsoft.com/cdo/configuration/sendpassword“”=“xxxx”
“.项目(”http://schemas.microsoft.com/cdo/configuration/sendtls“”=真
.项目(”http://schemas.microsoft.com/cdo/configuration/smtpusessl“”=真
.更新
以
设置objMessage.Configuration=objConfig
用objMessage
.Fields(“urn:schemas:httpmail:importance”)=2
.Fields.Update
.Subject=“NPD每周状态通知”
.From=”from@domain.com"
.To=”to@domain.com"
.HTMLBody=“”和_
“亲爱的先生,
”_
“
”和_
“请找出计划与实际日期的偏差,
”_
“
”和_
“注意:有关详细信息,请参阅随附的日志文件。
”&vbNewLine&_
“*这是系统生成的邮件。请勿回复。
”
如果ws1mailstatus=True,则
.AddAttachment文件名0
Kill(文件名0)
如果结束
如果ws2mailstatus=True,则
.AddAttachment文件名1
Kill(文件名1)
如果结束
如果ws3mailstatus=True,则
.AddAttachment文件名2
Kill(文件名2)
如果结束
如果ws4mailstatus=True,则
.AddAttachment文件名3
Kill(文件名3)
如果结束
如果ws5mailstatus=True,则
.AddAttachment文件名4
Kill(文件名4)
如果结束
以
出错时继续下一步
objMessage.Send
如果错误号为0,则
msgbox(“错误!”)
如果结束
错误转到0
Application.DisplayAlerts=True
Application.ScreenUpdating=True
端接头
这只是一个快速解决方案,该解决方案需要wininet.dll。我认为它应该可以在大多数安装了office的windows系统上使用
Private Declare Function InternetGetConnectedState Lib "wininet.dll" _
(ByRef dwflags As Long, ByVal dwReserved As Long) As Long
Function GetInternetConnectedState() As Boolean
GetInternetConnectedState = InternetGetConnectedState(0&, 0&)
End Function
然后,您可以调用它进行do-until循环
Sub loop_until_connection()
Do
Application.Wait (5000)
Loop Until GetInternetConnectedState = True
它将暂停5秒钟,然后再次尝试连接
这没有经过测试,所以我希望它能在您的情况下工作。请参阅。使用
do-loop
。我不建议使用do
循环。使用AppliCation.OnTime
检查是否有internet连接,然后发送电子邮件。你可以设置一个时间间隔多少分钟后,它应该检查互联网连接。还有“悉达多”,谢谢你。邮件是在工作簿上触发的。关闭事件,如果internet连接不可用,工作簿将直接关闭,并且我相信邮件不会保存在发件箱中以便再次发送。因此,如果您不想在发送电子邮件之前关闭工作簿,则可以设置取消=True
?并使用Application.OnTime
再次检查连接。抱歉,无法正确传达。我想关闭工作簿,即使internet连接不可用。但是,邮件必须存储在发件箱或草稿中,并在互联网连接可用时发送。谢谢您的回答。但是我不希望vba代码等待internet连接。我想关闭工作簿,即使internet连接不可用。但是,合成邮件必须存储在发件箱或草稿中,并在互联网连接可用时发送。我认为那是不可能的。你可以使用outlook,如果你将其发送到那里,我认为它会给你一个错误,但它会将邮件存储在传出部分,并在连接恢复时发送。我无法使用outlook,因为所有用户的系统中都没有安装outlook应用程序。所以office365是最好的选择,但是你认为它会被存储在哪里呢?如果未连接,则无法访问microsoft站点。我不知道你所描述的问题是否有解决方案,但我无法想象它是如何工作的,对不起。我知道这是一个独特的要求。谢谢你抽出时间。