繁体   English   中英

VBA 已发送/未发送电子邮件的 IF 语句

[英]VBA IF statement for sent/not sent emails

我正在使用下面的代码告诉我电子邮件何时发送并显示文本“已发送”,所以我知道没有错误。 但是我正在测试代码,并且在添加供应商名称后使用 vlookup 来显示电子邮件。 我的目标是不让宏调试并让它继续下一个,但同时让我知道一行有错误,因为该供应商没有列出 email,我需要填写email 在中。当我列出供应商时,我将一个单元格留空以测试代码。 即使我有有效的电子邮件,并且那些发送的电子邮件 VBA 显示“未发送”到已发送的电子邮件。 由于宏无法找到 email,因为其中一个单元格为空白,因此已对其进行了调试,并且在所有有效电子邮件旁边填充了“未发送”文本。 我错过了什么或做错了什么? 我只是想避免调试告诉我有一个错误,只是告诉我一行“未发送”,并继续发送 rest 并用“已发送”文本填充那些发送。

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
End If

msg.send

**If Issent = True Then
Range("G" & i).Value = "Sent"
Else
Range("G" & i).Value = "Not Sent"
End If**

next i

msgbox "Mails Sent"

End Sub

请尝试替换此代码部分:

msg.send

If Issent = True Then
   Range("G" & i).Value = "Sent"
Else
   Range("G" & i).Value = "Not Sent"
End If

有了这个:

Dim Issent As Boolean
   
   On Error Resume Next
    msg.send
   If Err.Number <> 0 Then
      Err.Clear: On Error GoTo 0
      Issent = False
   Else
      On Error GoTo 0
      Issent = True
   End If
   
    If Issent = True Then
       Range("G" & i).Value = "Sent"
    Else
       Range("G" & i).Value = "Not Sent"
    End If

编辑:我不认为上面插入的行会打扰您的代码流畅运行。 即使不是这个问题,请尝试下一个改编的代码。 它还处理要附加的文档的最终错误路径:

  1. 添加对Microsoft Outlook... Object Library的引用。 在 VBE(Visual Basic 编辑器)中,go:工具(菜单)-> 参考...向下滚动直到找到上述参考。 检查并按OK

  2. 复制下一个代码而不是你的代码,或者在它附近(我将更改Sub名称)并运行它:

    Sub Send_Multiple_Emails_bis()
     Dim sh As Worksheet, Issent As Boolean, i As Long, last_row As Long
     Dim OA As New Outlook.Application, msg As Outlook.MailItem
    
     Set sh = ActiveSheet ' ThisWorkbook.Sheets("sheet1")
    
     last_row = sh.Range("B" & Rows.count).End(xlUp).row
    
     For i = 2 To last_row
        Set msg = OA.CreateItem(0)
        With msg
            .To = sh.Range("B" & i).Value
            .cc = sh.Range("C" & i).Value
            .Subject = sh.Range("D" & i).Value
            .body = sh.Range("E" & i).Value
            '.display 'un-comment if you want to see each mail sending window
        End With
        
        If sh.Range("F" & i).Value <> "" Then
            If Dir(sh.Range("F" & i).Value) <> "" Then
                msg.Attachments.aDD sh.Range("F" & i).Value
            Else
                Range("G" & i).Value = "Wrong attachment path"
                GoTo NextMail
            End If
        End If
        
        On Error Resume Next
        msg.send
         If Err.Number <> 0 Then
            Err.Clear: On Error GoTo 0
            Issent = False
         Else
            On Error GoTo 0
            Issent = True
         End If
        
        If Issent = True Then
            Range("G" & i).Value = "Sent"
        Else
            Range("G" & i).Value = "Not Sent"
        End If
    NextMail:
        Set msg = Nothing
     Next i
    
     MsgBox "Mails Sent"
    End Sub

我想收到一些关于它的行为的反馈......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM