【问题标题】:excel vba nested for each loop为每个循环嵌套的excel vba
【发布时间】:2013-08-07 10:03:52
【问题描述】:

我正在处理 excel 宏,但在某一时刻卡住了。需要帮助来解决它。

我必须在工作表中查找 2 行,并为 1 行中的每个值查找 2 行中的单元格值。如果第 2 行中的值范围等于某个条件值,则退出第 2 行检查并将标志设置为真。为了实现这一点,我使用了两个 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 变量定义为 Boolean ,但我无法正确使用它,并且每次found = false 正在执行。我只希望第 2 行的条件为真,然后只创建邮件。

【问题讨论】:

  • 我会先看一下'If Not row = '8.00" Then'这行,你首先用单引号开始,然后用双引号结束。如果这是一个数字,那么引号应该不需要,如果是文本,请在两边使用双引号。

标签: loops excel for-loop each vba


【解决方案1】:

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

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

B)xlCellTypeConstant 更改为xlCellTypeConstants

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

D) @ChrisProsser 已经评论了 For Each row In Sheet14.Range("O244:AK244").Cells

E) 看在上帝的份上(请忽略...看在你的份上),请使用Option Explicit!我强烈建议使用Option Explicit 我还建议查看此链接(请参阅链接中的第 2 点)。

主题:“犯错”是人之常情

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

【讨论】:

    【解决方案2】:

    你正在运行那个 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 语句也应该在这个循环中?也许 found = False 在哪里?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2017-11-21
      相关资源
      最近更新 更多