【问题标题】:Excel VBA - Value & MsgBoxExcel VBA - 值和消息框
【发布时间】:2015-06-11 12:38:54
【问题描述】:

我发布了一个关于这段代码的问题,该代码已经被"Alex Bell" 更改,他帮助我编写了代码,每次在该特定范围内出现值“496”时都会出现一个 MsgBox。但是由于我对这门语言的了解很差,所以有很多事情我不能做。

我试图实现的下一步是做同样的事情,如果值为“496”,则 MsgBox 警报,但现在也是“800”。

那么问题是什么?问题是我无法想办法将这两个条件一起工作,例如它告诉我“496”和“800”在哪里,并填充包含该特定值的两个单元格。

这可能是一个很容易解决的问题,但我还是 vba 的新手,当我在学校学习 vb 时,我们并没有学到那么多。因此,期待我提出更多关于 vba 相关主题的问题,我目前正在努力学习它。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
If Not Intersect(Target, Range("G3:G500")) Is Nothing Then
For Each cell In Target

    'need clarification
    'Me.Cells(cell.Row, "496").Interior.ColorIndex = xlColorIndexNone
    'If cell.Value <> "" And cell.Value <> prevValue Then
    'Me.Cells(cell.Row, "496").Interior.ColorIndex = 3
    'End If

   If cell.Value = "496" Then
        cell.Interior.ColorIndex = 43
        MsgBox ("The row where the status is 496 is located in: " & cell.Row)
    Else
        cell.Interior.ColorIndex = xlColorIndexNone
    End If
Next cell
End If

'If Not Intersect(Target, Range("G3:G500")) Is Nothing Then
'    For Each cell In Target
'
'        If cell.Value = "800" Then
'            cell.Interior.ColorIndex = 4
'            MsgBox ("The row where the status is 800 is located in: " & cell.Row)
'        Else
'            cell.Interior.ColorIndex = xlColorIndexNone
'        End If
'    Next cell
'End If

End Sub

【问题讨论】:

    标签: excel vba if-statement alert


    【解决方案1】:
    If cell.Value = "496" Or cell.Value = "800" Then
        cell.Interior.ColorIndex = 43
        MsgBox ("The row where the status is 496 or 800 is located in: " & cell.Row)
    Else
        cell.Interior.ColorIndex = xlColorIndexNone
    End If
    

    或者像这样:

    If cell.Value = "496" Then
        cell.Interior.ColorIndex = 43
        MsgBox ("The row where the status is 496 is located in: " & cell.Row)
    ElseIf cell.Value = "800" Then
        cell.Interior.ColorIndex = 45
        MsgBox ("The row where the status is 800 is located in: " & cell.Row)
    Else
        cell.Interior.ColorIndex = xlColorIndexNone
    End If
    

    如果您想进行更多检查,可以考虑将要打印的行号存储到变量中,最后您可以调用 MsgBox:

    Dim rowNumbers As String
    rowNumbers = ""
    If Not Intersect(Target, Range("G3:G500")) Is Nothing Then
      For Each cell In Target    
           If cell.Value = "496" Then
             cell.Interior.ColorIndex = 43
             rowNumbers = rowNumbers & cell.Row & " "
           ElseIf cell.Value = "800" Then
             cell.Interior.ColorIndex = 45
             rowNumbers = rowNumbers & cell.Row & " "
           Else
             cell.Interior.ColorIndex = xlColorIndexNone
           End If
      Next cell
      MsgBox ("The rows where the status is 496 or 800 is located in: " & rowNumbers)
    End If
    

    【讨论】:

    • 我认为第二个更好,因为不同的颜色来区分值,以及更好的结构化代码,感谢您的快速回答和帮助 moffeltje。 :)
    • 如果您有很多 msgbox,您可能需要考虑整理行号并在循环外执行 msg 以防止出现大量 msgbox
    • 你能解释清楚吗?就像我说的对这个主题很陌生。
    • 您的帮助非常感谢您提供的所有选项:D
    猜你喜欢
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多