excel vba为每个循环嵌套

我正在研究excelmacros,并陷入了一个困境。 需要帮助,请解决它。

我必须在表单中查找2行,并且对于1行中的每个值,查找2行中的单元格值。 如果第2行中的值范围等于某个条件值,则从第2行中检出并将该标志设置为true。 为了实现这个,我使用了两个For Each循环:

  Sub Sendmail () For Each cell in Rows("5").Cells.SpecialCells(xlCellTypeConstant) If cells.Value Like "*@*" Then Subj = "Fill the Sheet" Recipient = cell.Offset(0,-3).Value EmailAddr = cell.Offset.Value For Each row In Sheet14.Range("O244:AK244").Cells If Not row = '8.00" Then found = False Else found = True End If Next row If found = False Then Msg = "Hi " & Recipient & vbCrLf & vbCrLf Msg = Msg & " Please fill the sheet for this week " & vbCrLf & vbCrLf Set MItem = Outlook.CreateItem(oIMailItem) With MItem .To = EmailAddr .Subject = Subj .Body = Msg .Save End With End If End If Next End Sub 

这里使用的foundvariables被定义为布尔值,但我无法正确使用它,并且每次found = false正在执行。 我只想要第2行的条件为真,那么只有邮件应该创build。

几件我注意到的事情…我没有testing代码,但这是我的一般观察。

A)一个明显的代码是If cells.Value Like "*@*" Then 。 将其更改为If cell.Value Like "*@*" Then

B)xlCellTypeConstants更改为xlCellTypeConstants

C) EmailAddr = cell.Offset.Value如果你想获得相同的单元格的值,你不需要Offset否则指定Offset的参数

D) @ChrisProsser已经对Sheet14.Range中的For Each row In Sheet14.Range("O244:AK244").Cells

E)看在上帝的份上(不要理会这个…为了你的缘故),使用Option Explicit ! 我强烈build议使用Option Explicit我也build议看看这个链接(在链接中查看点2)。

主题 :“Err”是人类

链接 : http : //www.siddharthrout.com/2011/08/01/to-err-is-human/

您正在运行For循环;

 For Each row In Sheet14.Range("O244:AK244").Cells If Not row = '8.00" Then found = False Else found = True End If Next row 

整个范围内没有做任何事情的条件。 这与仅检查范围中的最后一个单元格相同,可能是True,这就是为什么您认为False正在执行。 也许你的if语句也应该在这个循环中呢? 也许在哪里find= False是?