【问题标题】:Confirm Email Sent by Displaying Sent/Not Sent Text通过显示已发送/未发送文本确认电子邮件已发送
【发布时间】:2020-07-23 20:38:14
【问题描述】:

我的目标是知道电子邮件何时发送。

我有 msgbox 代码,知道所有电子邮件地址都已处理。

我的编码着眼于填充的单元格/列。我有一列列出电子邮件地址、一列用于电子邮件正文、一列用于附件路径等。

我想为每个电子邮件地址添加一个“状态”。我想说发送或未发送(如果它是无效的电子邮件地址,则不发送)。

现在,如果电子邮件地址无效,它会进行调试。我不想等到它调试后才发现它不是一个有效的电子邮件地址。我希望每一行都有一个电子邮件地址,说明已发送或未发送,但即使它不是有效的电子邮件地址,也要继续发送。

如果不进行调试,msgbox 就很棒。我想保留消息框。

我的 Excel 工作簿中的布局。我希望将已发送和未发送的信息填充到状态列中。

Sub Send_Multiple_Emails()
dim sh as worksheet
set sh = thisworkbook.sheets("sheet1") '<-- rename to what the tabs name is

dim OA as Object
Dim msg As object

set OA = createobject("Outlook.Application")

Dim i as integer
dim last_row As Integer

last_row = application.worksheetfunction.counta(sh.range("B:B"))

for i = 2 To last_row

    Set msg = OA.createitem(0)

    msg.to = sh.Range("B" & i).Value
    msg.cc = sh.Range("C" & i).Value
    msg.subject = sh.range("D" & i ).Value
    msg.body = sh.Range("E" & i).Value

    if sh.Range("F" & i).Value <> "" Then
        msg.attachments.add sh.range("F" & i).Value
        msg.send


next i

msgbox "Mails Sent"

End Sub

【问题讨论】:

    标签: excel vba email outlook


    【解决方案1】:

    这是一种罕见的情况On Error Resume Next可以合适。

    绕过预期的错误以在代码中处理它。

    Option Explicit
    
    Sub RecognizeSendError()
    
        Dim OA As Object
        Dim msg As Object
        
        Dim msgSent As Boolean
            
        Set OA = CreateObject("Outlook.Application")
        Set msg = OA.CreateItem(0)
        
        msg.To = "NotValid"
        Debug.Print "msg.To: " & msg.To
        
        msg.Subject = "subject"
        msg.Body = "body"
        
        ' use only for a specific purpose
        On Error Resume Next
        
        msg.Send
            
        ' deal with expected error
        If Err <> 0 Then
            'Debug.Print " Err: " & Err
            msgSent = False
        Else
            msgSent = True
        End If
        
        ' Return to normal error handling for unexpected errors
        ' Consider mandatory after On Error Resume Next
        On Error GoTo 0
        
        If msgSent Then
            Debug.Print " Success"
        Else
            Debug.Print " Failure"
        End If
            
        Debug.Print "Done"
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 2020-04-19
      • 2014-02-01
      • 2012-02-28
      • 1970-01-01
      • 2011-12-19
      相关资源
      最近更新 更多