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
这里使用的found
variables被定义为布尔值,但我无法正确使用它,并且每次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是?