You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA序列邮件发送程序中如何正确跳过隐藏行?

解决VBA批量发邮件跳过隐藏行的问题

修改后的完整代码

Sub Send_seq_two()

Dim sh As Worksheet
Dim sh2 As Worksheet
Set sh = ThisWorkbook.Sheets("TheHub")
Set sh2 = ThisWorkbook.Sheets("Tables")
Set sh3 = ThisWorkbook.Sheets("Contacts")
Set OA = CreateObject("Outlook.Application")
Dim msg As Object
Dim sign As String
Dim I As Integer

Dim tbl As ListObject
Set tbl = Application.Range("mt").ListObject

Dim lrow As Integer
lrow = tbl.Range.Rows(tbl.Range.Rows.Count).Row

' 不符合序列条件时提示并终止程序
If sh.Range("B2").Value <> "2" Or sh3.Range("K6").Value = "1" Then
    MsgBox "check sequence"
    Exit Sub ' 新增:避免不符合条件时继续执行循环
End If

For I = 6 To lrow
    ' 判断当前行是否隐藏,隐藏则跳过
    If sh3.Rows(I).Hidden Then GoTo NextRow

    Set msg = OA.CreateItem(0)

    ' 原有条件基础上保留,确保只处理符合要求的收件人
    If sh3.Range("H" & I).Value <> "" And sh3.Range("K" & I).Value = "" And sh3.Range("J" & I).Value = "1" And sh.Range("B2").Value = "2" Then

        msg.Display
        sign = msg.HTMLBody

        msg.To = sh3.Range("H" & I).Value
        msg.CC = sh3.Range("I" & I).Value
        msg.Subject = sh.Range("B3").Value
        msg.HTMLBody = "<p><span style='font-size:15px;font-family:Calibri,sans-serif;'>Hi " & sh3.Range("D" & I).Value & ",<br><br>" & sh2.Range("D3").Value & sign

        If sh.Range("B4").Value <> "" Then
            msg.attachments.Add sh.Range("B4").Value
        End If

        msg.Send
    
        sh.Range("C14").Value = Date
        sh3.Range("K" & I).Value = "1"

    End If

NextRow: ' 跳转标签,用于跳过隐藏行
Next I

End Sub

关键修改说明

  • 终止不符合条件的程序执行:在开头的MsgBox后添加Exit Sub,避免序列不满足时仍然执行邮件发送循环,减少不必要的错误。
  • 跳过隐藏行:在循环开头增加If sh3.Rows(I).Hidden Then GoTo NextRow,直接跳过被隐藏的行,不执行后续的邮件发送逻辑。
  • 保留原有筛选条件:继续保留你原本设置的收件人判断逻辑(邮箱非空、未发送过第二封邮件、标记为有效收件人、序列为2),确保只处理目标收件人。

内容的提问来源于stack exchange,提问作者Jdeesler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:48:30