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
相关产品推荐
相关产品推荐

