如何用VBA跳过无邮箱行发送邮件直至strTour_Nr为空行
VBA发送邮件:跳过空邮箱直到指定行结束
核心思路:主动判断替代错误忽略
别依赖On Error Resume Next掩盖问题,直接在循环里加两个判断逻辑:
- 先检查当前行的
strTour_Nr是否为空,为空就终止循环 - 再检查当前行的
strEmail是否为空,为空就跳过该行,继续下一行
完整代码示例
Sub SendTourEmails() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim strEmail As String Dim strTour_Nr As String Dim olApp As Object Dim olMail As Object ' 设置要读取的工作表 Set ws = ThisWorkbook.Worksheets("你的工作表名称") ' 替换成实际表名 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 假设Tour_Nr在A列,按需修改列号 ' 初始化Outlook对象 Set olApp = CreateObject("Outlook.Application") ' 从第2行开始循环(假设第1行是表头) For i = 2 To lastRow ' 获取当前行的Tour_Nr和邮箱 strTour_Nr = Trim(ws.Cells(i, "A").Value) ' 替换成Tour_Nr所在列 strEmail = Trim(ws.Cells(i, "B").Value) ' 替换成邮箱所在列 ' 终止条件:Tour_Nr为空时退出循环 If strTour_Nr = "" Then Exit For End If ' 跳过空邮箱的行 If strEmail = "" Then GoTo NextRow End If ' 发送邮件的逻辑 Set olMail = olApp.CreateItem(0) With olMail .To = strEmail .Subject = "你的邮件主题" .Body = "邮件内容" ' .Attachments.Add "附件路径" ' 如果需要加附件的话 .Send ' 测试阶段可以用.Display代替 End With ' 释放邮件对象 Set olMail = Nothing NextRow: Next i ' 释放Outlook对象 Set olApp = Nothing MsgBox "邮件发送完成" End Sub
关于On Error Resume Next的正确停止方式
如果确实需要临时忽略特定错误,记得在不需要的时候关闭错误捕获:
- 用
On Error GoTo 0恢复默认错误处理(遇到错误会正常弹出提示并终止) - 示例用法:
On Error Resume Next ' 执行可能出错的代码(比如发送邮件) If Err.Number <> 0 Then ' 可选:记录错误信息到调试窗口 Debug.Print "行" & i & "发送失败:" & Err.Description Err.Clear End If On Error GoTo 0 ' 关闭错误忽略,恢复正常错误处理
注意:尽量少用On Error Resume Next,它会隐藏其他潜在问题(比如Outlook未启动、权限不足等),主动判断邮箱和终止条件的方式更可控。
内容的提问来源于stack exchange,提问作者user19600963
相关产品推荐
相关产品推荐

