【问题标题】:Excel VBA -- Need help constructing a line of code using for loop, if statement, and message boxExcel VBA -- 需要帮助使用 for 循环、if 语句和消息框构造一行代码
【发布时间】:2015-07-12 02:59:47
【问题描述】:

我需要帮助来构建一个基本上会显示一个消息框的代码,该消息框将充当各种错误消息或通知消息。这是我想的一个示例代码,我知道它会起作用,但不完全是我正在寻找的输出

lr = Sheet1.Cells(Rows.Count, 1).End(xlUP).Row

for a = 1 to lr
   if Sheet1.Cells(a,1) = Date then 
      ` A whole new set of codes here that's not really an issue so i'll save time and just skip writing it down

   else MsgBox "No Data for Today!"
   end if
next a

我知道这会起作用并显示一个带有“今天没有数据!”字样的 msgbox,但问题是,每次 for 循环进行另一遍时,它都会再次显示 msgbox。我想要发生的是它应该只显示 msgbox ONCE 并且只有在它检查了所有单元格并验证这些单元格上的数据不等于当前日期之后。

任何帮助将不胜感激。 :)

编辑:

只是对我想要实现的目标的简要说明。所以基本上,我提供的代码会检查 A 列的每一行,以确定其中的数据是否等于当前日期?所以我想要发生的是,我不想检查该范围内的所有单元格并显示一个 MsgBox 如果该范围内的单元格没有等于当前日期,并且如果它们等于当前日期,那么它不应该显示 MsgBox。我尝试从@JGreenwell 运行下面的代码,如果单元格范围内的所有数据不等于当前日期,它确实显示了正确的 MsgBox,但是,如果我在等于当前日期的范围内添加数据,即使至少有一个数据等于当前日期,它仍会显示 msgbox。

我希望这比我原来的问题更清楚。我真的很感谢你们告诉我的所有提示/建议/帮助。 :)

Dim dataFlag As Boolean
dataFlag = False 'create and set boolean type flag

for a = 1 to lr
    if Sheet1.Cells(a,1) = Date then
        ' A whole new set of codes here that's not really an issue so i'll save time and just skip writing it down

    else 
        dataFlag = True
    end if
next a

If dataFlag Then
    MsgBox "No Data for Today!"
End If

【问题讨论】:

    标签: vba excel if-statement for-loop


    【解决方案1】:
    lr = Sheet1.Cells(Rows.Count, 1).End(xlUP).Row
    
    for a = 1 to lr
       if Sheet1.Cells(a,1) = Date then
          ` A whole new set of codes here that's not really an issue so i'll save time and just skip writing it down
    
       else 
           UnFound = 1
       end if
    next a
    If UnFound = 1 Then MsgBox "No Data for Today!"
    

    【讨论】:

    • 我更改了答案以符合您的更改。
    【解决方案2】:

    您可以设置一个标志,如果设置了标志,则只显示消息。

    Dim dataFlag As Boolean
    dataFlag = False 'create and set boolean type flag
    
    for a = 1 to lr
        if Sheet1.Cells(a,1) = Date then
            ' A whole new set of codes here that's not really an issue so i'll save time and just skip writing it down
    
        else 
            dataFlag = True
        end if
    next a
    
    If dataFlag Then
        MsgBox "No Data for Today!"
    End If
    

    标志是一种标准的编程实践,它允许条件算法(指令集)关联。对于您的情况,可以使用简单的 Boolean 类型,但这也可以与其他 数据结构 和/或多个 条件 结合使用:例如设置标志到几个值之一,并根据标志包含的值采取不同的操作。

    【讨论】:

    • 感谢@JGreenwell,但我在最初的问题上犯了一个错误,现在刚刚对其进行了编辑。这两种方法都行吗?
    • 您是有意删除了 for 循环还是只是忘记将其放入您的代码中?
    • 嘿@JGreenwell,谢谢你,它工作得很好,但问题是我想我忘了提到我想要实现的一个小细节。当它没有找到没有当前日期的单元格时,这确实有效,但是,当我在同一列的下一行添加具有当前日期的新数据时,它会像应该那样执行我的代码,但它也显示 msgbox,我不希望这种情况发生。有什么想法吗?
    • 一,是的,我故意删除了循环(答案不需要它)。二,您发布的代码对您的问题没有意义(用解释和示例案例更新您的问题)
    • @synthaxe 您的问题毫无意义。您需要:删除更新,投票并接受此问题的答案,并针对新问题提出另一个问题(您可以在新问题中链接到此问题)或真正努力解释您的问题。跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多