在Excel中循环直到
嗨,我正在尝试循环,直到它找到最后一个单元格,然后停止,但当它到达空单元格时,它给了我一个错误,因为在最后一个空单元格中没有人可以发送电子邮件。我将复制我的代码,以便您理解我的意思在Excel中循环直到,excel,vba,loops,Excel,Vba,Loops,嗨,我正在尝试循环,直到它找到最后一个单元格,然后停止,但当它到达空单元格时,它给了我一个错误,因为在最后一个空单元格中没有人可以发送电子邮件。我将复制我的代码,以便您理解我的意思 Sub SendMassEmail() row_number = 0 Do DoEvents row_number = row_number + 1 item_in_review = Sheet1.Range("A" & row_number) Dim mail_bo
Sub SendMassEmail()
row_number = 0
Do
DoEvents
row_number = row_number + 1
item_in_review = Sheet1.Range("A" & row_number)
Dim mail_body_message As String
Dim full_name As String
Dim exam_grade As String
mail_body_message = Sheet1.Range("G3")
full_name = Sheet1.Range("B" & row_number) & " " & Sheet1.Range("C" & row_number)
exam_grade = Sheet1.Range("D" & row_number)
mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
mail_body_message = Replace(mail_body_message, "exam_grade_replace", exam_grade)
Call SendEmail(Sheet1.Range("A" & row_number), "Final Year Exam Results", mail_body_message)
Loop Until item_in_review = ""
MsgBox "The Email Sending Process Is Complete!"
End Sub
编辑…发送电子邮件子项
Sub SendEmail(what_address As String, subject_line As String, mail_body As String)
Dim olApp As Outlook.Application
Set olApp = CreateObject("Outlook.Application")
Dim olMail As Outlook.MailItem
Set olMail = olApp.CreateItem(olMailItem)
olMail.To = what_address
olMail.Subject = subject_line
olMail.Body = mail_body
olMail.Send
End Sub
基本上,它发送列表中的所有电子邮件,但当它点击最后一个空单元格时,会抛出运行时错误,我相信这是因为最后一个空单元格中没有电子邮件地址可发送。那么,有人知道我怎样才能让它在到达终点时停止吗?试试:
Sub SendMassEmail()
row_number = 1
item_in_review = Sheet1.Range("A" & row_number)
Do Until item_in_review = ""
DoEvents
Dim mail_body_message As String
Dim full_name As String
Dim exam_grade As String
mail_body_message = Sheet1.Range("G3")
full_name = Sheet1.Range("B" & row_number) & " " & Sheet1.Range("C" & row_number)
exam_grade = Sheet1.Range("D" & row_number)
mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
mail_body_message = Replace(mail_body_message, "exam_grade_replace", exam_grade)
Call SendEmail(Sheet1.Range("A" & row_number), "Final Year Exam Results", mail_body_message)
row_number = row_number + 1
item_in_review = Sheet1.Range("A" & row_number) ' This is the new line
Loop
MsgBox "The Email Sending Process Is Complete!"
End Sub
我已将“循环直到”更改为“执行直到”-您的过程试图在“执行”和“循环直到”之间运行完整的代码,而您确实希望它在满足条件(_review=“”)后立即停止-您可以通过在进入循环之前测试位置来实现这一点。尝试:
Sub SendMassEmail()
row_number = 1
item_in_review = Sheet1.Range("A" & row_number)
Do Until item_in_review = ""
DoEvents
Dim mail_body_message As String
Dim full_name As String
Dim exam_grade As String
mail_body_message = Sheet1.Range("G3")
full_name = Sheet1.Range("B" & row_number) & " " & Sheet1.Range("C" & row_number)
exam_grade = Sheet1.Range("D" & row_number)
mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
mail_body_message = Replace(mail_body_message, "exam_grade_replace", exam_grade)
Call SendEmail(Sheet1.Range("A" & row_number), "Final Year Exam Results", mail_body_message)
row_number = row_number + 1
item_in_review = Sheet1.Range("A" & row_number) ' This is the new line
Loop
MsgBox "The Email Sending Process Is Complete!"
End Sub
我已将“循环直到”更改为“执行直到”-您的过程试图在“执行”和“循环直到”之间运行完整的代码,而您确实希望它在满足条件(_review=“”)后立即停止-您可以通过在进入循环之前测试位置来实现这一点。尝试:
Sub SendMassEmail()
row_number = 1
item_in_review = Sheet1.Range("A" & row_number)
Do Until item_in_review = ""
DoEvents
Dim mail_body_message As String
Dim full_name As String
Dim exam_grade As String
mail_body_message = Sheet1.Range("G3")
full_name = Sheet1.Range("B" & row_number) & " " & Sheet1.Range("C" & row_number)
exam_grade = Sheet1.Range("D" & row_number)
mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
mail_body_message = Replace(mail_body_message, "exam_grade_replace", exam_grade)
Call SendEmail(Sheet1.Range("A" & row_number), "Final Year Exam Results", mail_body_message)
row_number = row_number + 1
item_in_review = Sheet1.Range("A" & row_number) ' This is the new line
Loop
MsgBox "The Email Sending Process Is Complete!"
End Sub
我已将“循环直到”更改为“执行直到”-您的过程试图在“执行”和“循环直到”之间运行完整的代码,而您确实希望它在满足条件(_review=“”)后立即停止-您可以通过在进入循环之前测试位置来实现这一点。尝试:
Sub SendMassEmail()
row_number = 1
item_in_review = Sheet1.Range("A" & row_number)
Do Until item_in_review = ""
DoEvents
Dim mail_body_message As String
Dim full_name As String
Dim exam_grade As String
mail_body_message = Sheet1.Range("G3")
full_name = Sheet1.Range("B" & row_number) & " " & Sheet1.Range("C" & row_number)
exam_grade = Sheet1.Range("D" & row_number)
mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
mail_body_message = Replace(mail_body_message, "exam_grade_replace", exam_grade)
Call SendEmail(Sheet1.Range("A" & row_number), "Final Year Exam Results", mail_body_message)
row_number = row_number + 1
item_in_review = Sheet1.Range("A" & row_number) ' This is the new line
Loop
MsgBox "The Email Sending Process Is Complete!"
End Sub
我已将“循环直到”更改为“执行直到”-您的过程试图在“执行”和“循环直到”之间运行完整的代码,而实际上您希望它在符合条件时立即停止(_review=”“)was met-通过在进入循环之前测试位置来实现此目的。查找连续范围内最后一个单元格的最简单方法是range.End(xlDown)。Range.End(xlDown).row您将给出该单元格的行索引
Sub SendMassEmail()
For each row in Sheet1.Range("A" & Sheet1.Range("A1").End(xlDown).row)
item_in_review = Sheet1.Range("A" & row.row)
Dim mail_body_message As String
Dim full_name As String
Dim exam_grade As String
mail_body_message = Sheet1.Range("G3")
full_name = Sheet1.Range("B" & row.row) & " " & Sheet1.Range("C" & row.row)
exam_grade = Sheet1.Range("D" & row.row)
mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
mail_body_message = Replace(mail_body_message, "exam_grade_replace", exam_grade)
Call SendEmail(Sheet1.Range("A" & row.row), "Final Year Exam Results", mail_body_message)
Next row
MsgBox "The Email Sending Process Is Complete!"
End Sub
查找连续区域中最后一个单元格的最简单方法是range.End(xlDown)。Range.End(xlDown).row您将给出该单元格的行索引
Sub SendMassEmail()
For each row in Sheet1.Range("A" & Sheet1.Range("A1").End(xlDown).row)
item_in_review = Sheet1.Range("A" & row.row)
Dim mail_body_message As String
Dim full_name As String
Dim exam_grade As String
mail_body_message = Sheet1.Range("G3")
full_name = Sheet1.Range("B" & row.row) & " " & Sheet1.Range("C" & row.row)
exam_grade = Sheet1.Range("D" & row.row)
mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
mail_body_message = Replace(mail_body_message, "exam_grade_replace", exam_grade)
Call SendEmail(Sheet1.Range("A" & row.row), "Final Year Exam Results", mail_body_message)
Next row
MsgBox "The Email Sending Process Is Complete!"
End Sub
查找连续区域中最后一个单元格的最简单方法是range.End(xlDown)。Range.End(xlDown).row您将给出该单元格的行索引
Sub SendMassEmail()
For each row in Sheet1.Range("A" & Sheet1.Range("A1").End(xlDown).row)
item_in_review = Sheet1.Range("A" & row.row)
Dim mail_body_message As String
Dim full_name As String
Dim exam_grade As String
mail_body_message = Sheet1.Range("G3")
full_name = Sheet1.Range("B" & row.row) & " " & Sheet1.Range("C" & row.row)
exam_grade = Sheet1.Range("D" & row.row)
mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
mail_body_message = Replace(mail_body_message, "exam_grade_replace", exam_grade)
Call SendEmail(Sheet1.Range("A" & row.row), "Final Year Exam Results", mail_body_message)
Next row
MsgBox "The Email Sending Process Is Complete!"
End Sub
查找连续区域中最后一个单元格的最简单方法是range.End(xlDown)。Range.End(xlDown).row您将给出该单元格的行索引
Sub SendMassEmail()
For each row in Sheet1.Range("A" & Sheet1.Range("A1").End(xlDown).row)
item_in_review = Sheet1.Range("A" & row.row)
Dim mail_body_message As String
Dim full_name As String
Dim exam_grade As String
mail_body_message = Sheet1.Range("G3")
full_name = Sheet1.Range("B" & row.row) & " " & Sheet1.Range("C" & row.row)
exam_grade = Sheet1.Range("D" & row.row)
mail_body_message = Replace(mail_body_message, "replace_name_here", full_name)
mail_body_message = Replace(mail_body_message, "exam_grade_replace", exam_grade)
Call SendEmail(Sheet1.Range("A" & row.row), "Final Year Exam Results", mail_body_message)
Next row
MsgBox "The Email Sending Process Is Complete!"
End Sub
你能在你的答案中添加一个解释吗?我希望我在代码下面给出了足够好的解释。欢迎进一步编辑。谢谢,我不想在没有给你机会的情况下编辑你的答案。非常感谢。我认为这给了OP更好的机会去理解他哪里出了错。谢谢Jiminy Cricket,我明白你的意思了,尽管这么说,我还是犯了运行时错误“收件人、抄送或密件抄送”框中必须至少有一个姓名或通讯组列表。你知道如何停止这个运行时错误吗?我现在已经做了,在原始帖子的底部添加了代码,你可以在你的答案中添加一个解释,解释为什么会这样吗?我希望我已经在代码下面给出了足够好的解释。欢迎进一步编辑。谢谢,我不想在没有给你机会的情况下编辑你的答案。非常感谢。我认为这给了OP更好的机会去理解他哪里出了错。谢谢Jiminy Cricket,我明白你的意思了,尽管这么说,我还是犯了运行时错误“收件人、抄送或密件抄送”框中必须至少有一个姓名或通讯组列表。你知道如何停止这个运行时错误吗?我现在已经做了,在原始帖子的底部添加了代码,你可以在你的答案中添加一个解释,解释为什么会这样吗?我希望我已经在代码下面给出了足够好的解释。欢迎进一步编辑。谢谢,我不想在没有给你机会的情况下编辑你的答案。非常感谢。我认为这给了OP更好的机会去理解他哪里出了错。谢谢Jiminy Cricket,我明白你的意思了,尽管这么说,我还是犯了运行时错误“收件人、抄送或密件抄送”框中必须至少有一个姓名或通讯组列表。你知道如何停止这个运行时错误吗?我现在已经做了,在原始帖子的底部添加了代码,你可以在你的答案中添加一个解释,解释为什么会这样吗?我希望我已经在代码下面给出了足够好的解释。欢迎进一步编辑。谢谢,我不想在没有给你机会的情况下编辑你的答案。非常感谢。我认为这给了OP更好的机会去理解他哪里出了错。谢谢Jiminy Cricket,我明白你的意思了,尽管这么说,我还是犯了运行时错误“收件人、抄送或密件抄送”框中必须至少有一个姓名或通讯组列表。你知道如何停止这个运行时错误吗?我现在已经做了,在原始文章的底部添加了代码