在 VBA 中使用 CDO.sys dll 发送消息会冻结 Excel
Using CDO.sys dll for sending messages in VBA freezes Excel
我在使用 CDO.sys 从启用 VBA 的 Excel 应用程序发送电子邮件时遇到了一个奇怪的问题。
我使用了以下代码,可在 https://www.rondebruin.nl/win/s1/cdo.htm 找到:
Sub SendMailCDO(FSubject As String, FBody As String, FFrom As String, FTo As String, FCc As String)
Dim iMsg As Object
Dim iConf As Object
Dim Flds As Variant
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
iConf.Load -1 ' CDO Source Defaults
Set Flds = iConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "myServerIPAddress"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Update
End With
With iMsg
Set .Configuration = iConf
.To = "mydestination"
.CC = ""
.BCC = ""
.From = FFrom
.Subject = FSubject
.TextBody = ""
.HTMLBody = FBody
.Send
End With
MsgBox ("Email sent to " & FTo)
Set iMsg = Nothing
Set iConf = Nothing
Set Flds = Nothing
End Sub
现在,代码可以正常工作,并且可以发送电子邮件。但是,在发送第一封电子邮件后,Excel 立即对许多不同的命令没有响应。例如,更改单元格中的字体尺寸或应用条件格式等常规操作不再有效。此外,Excel 似乎执行所有内容都很慢。
解决此问题的唯一解决方案是关闭 Excel 并再次打开它。
有什么解决问题的建议吗?
提前致谢,
埃米利奥
绝对出乎意料,但删除 Msgbox 调用 "Email sent to" 解决了问题!
这也发生在我身上。如果您有同样的问题,我得说删除 Msgbox 调用不一定会解决它。然而,之前的回答让我意识到我的代码中的任何内容都可能导致问题。
所以...我尝试注释每一行,在我的例子中,删除对 Application.StatusBar 的调用就像一个魅力。状态不佳,但至少 Excel 发送电子邮件后不再冻结。
希望对您有所帮助 ;)
我在使用 CDO.sys 从启用 VBA 的 Excel 应用程序发送电子邮件时遇到了一个奇怪的问题。 我使用了以下代码,可在 https://www.rondebruin.nl/win/s1/cdo.htm 找到:
Sub SendMailCDO(FSubject As String, FBody As String, FFrom As String, FTo As String, FCc As String)
Dim iMsg As Object
Dim iConf As Object
Dim Flds As Variant
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
iConf.Load -1 ' CDO Source Defaults
Set Flds = iConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "myServerIPAddress"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Update
End With
With iMsg
Set .Configuration = iConf
.To = "mydestination"
.CC = ""
.BCC = ""
.From = FFrom
.Subject = FSubject
.TextBody = ""
.HTMLBody = FBody
.Send
End With
MsgBox ("Email sent to " & FTo)
Set iMsg = Nothing
Set iConf = Nothing
Set Flds = Nothing
End Sub
现在,代码可以正常工作,并且可以发送电子邮件。但是,在发送第一封电子邮件后,Excel 立即对许多不同的命令没有响应。例如,更改单元格中的字体尺寸或应用条件格式等常规操作不再有效。此外,Excel 似乎执行所有内容都很慢。 解决此问题的唯一解决方案是关闭 Excel 并再次打开它。 有什么解决问题的建议吗? 提前致谢, 埃米利奥
绝对出乎意料,但删除 Msgbox 调用 "Email sent to" 解决了问题!
这也发生在我身上。如果您有同样的问题,我得说删除 Msgbox 调用不一定会解决它。然而,之前的回答让我意识到我的代码中的任何内容都可能导致问题。
所以...我尝试注释每一行,在我的例子中,删除对 Application.StatusBar 的调用就像一个魅力。状态不佳,但至少 Excel 发送电子邮件后不再冻结。
希望对您有所帮助 ;)