Loops excel vba为每个循环嵌套

Loops excel vba为每个循环嵌套,loops,excel,for-loop,each,vba,Loops,Excel,For Loop,Each,Vba,我正在处理excel宏,有一次遇到了问题。需要帮助,请解决它 我必须在工作表中查找2行,在1行中查找每个值,在2行中查找单元格值。如果第2行中的值范围等于某个条件值,则退出第2行检查并将标志设置为true。为了实现这一点,我对每个循环使用了两个: Sub Sendmail () For Each cell in Rows("5").Cells.SpecialCells(xlCellTypeConstant) If cells.Value Like "*@*" Then

我正在处理excel宏,有一次遇到了问题。需要帮助,请解决它

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

 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
变量定义为布尔值,但我无法正确使用它,并且每次执行
found=false
。我只希望在第2行的条件为true时,只创建邮件。

您正在运行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

适用于整个范围,而不针对每个条件执行任何操作。这与只检查范围中的最后一个单元格相同,这可能是真的,因此您认为执行False的原因。也许您的if语句也应该在这个循环中?也许find=False在哪里?

我注意到的几件事。。。我没有测试代码,但这里是我的一般观察

A)一个引人注目的代码是
如果单元格的值为“*@*”,则
。如果cell.Value像“*@*”那么将其更改为

B)
xlCellTypeConstant
更改为
xlCellTypeConstants

C)
EmailAddr=cell.Offset.Value
如果要获取同一单元格的值,则不需要
Offset
或者指定Offset的参数

D)@ChrisProsser已经对Sheet14.Range(“O244:AK244”).单元格中的每一行进行了注释

E)看在上帝的份上(我们可以忽略这一点……看在你的份上),使用
选项Explicit
!我强烈建议使用
选项Explicit
,我还建议查看此链接(请参阅链接中的第2点)

主题:犯错是人的行为


链接

我会看一行“如果不是行='8.00”,然后“首先以单引号开始,以双引号结束。如果这是一个数字,则不需要引号,如果是文本,则两边使用双引号。