在 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 发送电子邮件后不再冻结。

希望对您有所帮助 ;)