Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 存储由工作簿触发的电子邮件。关闭,直到internet连接可用时可以发送为止_Excel_Vba_Office365 - Fatal编程技术网

Excel 存储由工作簿触发的电子邮件。关闭,直到internet连接可用时可以发送为止

Excel 存储由工作簿触发的电子邮件。关闭,直到internet连接可用时可以发送为止,excel,vba,office365,Excel,Vba,Office365,我开发了一个VBA程序,使用CDO代码从Office365电子邮件帐户发送电子邮件 邮件由工作簿.close事件触发 它需要一个活动的internet连接。在没有internet连接的情况下,它会抛出一条错误消息 如果internet连接不可用,则必须关闭工作簿,并且撰写的邮件必须存储在发件箱/草稿中,或者以任何其他可能的方式存储在Office365帐户中,以便在internet连接可用时发送 Sub-send_-mails1() Dim OBJ消息、objConfig、字段 Applicati

我开发了一个VBA程序,使用CDO代码从Office365电子邮件帐户发送电子邮件

邮件由
工作簿.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站点。我不知道你所描述的问题是否有解决方案,但我无法想象它是如何工作的,对不起。我知道这是一个独特的要求。谢谢你抽出时间。