excel vba为每个循环嵌套

时间:2013-08-06 11:55:07

标签: excel loops excel-vba for-loop each vba

我正在研究excel宏并且一度陷入困境。需要帮助才能解决它。

我必须在工作表中查找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变量被定义为布尔值,但我无法正确使用它,并且每次执行found = false时都是如此。我想只有在第2行条件成立时,才能创建邮件。

2 个答案:

答案 0 :(得分:2)

我注意到的一些事情......我没有测试过代码,但这是我的一般观察。

A)一段引人注目的代码是If cells.Value Like "*@*" Then。将其更改为If cell.Value Like "*@*" Then

B)xlCellTypeConstant更改为xlCellTypeConstants

C) EmailAddr = cell.Offset.Value如果您想要获取相同的单元格值,则不需要Offset指定偏移量的参数

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

发表了评论

E)为了上帝的缘故(请忽略......为了您),请使用Option Explicit!我强烈建议使用Option Explicit我还建议您查看此链接(链接中的SEE POINT 2)。

主题:'Err'是人类

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

答案 1 :(得分:0)

您正在运行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语句也应该在这个循环中?也许在哪里找到=假是?