根据不同单元格中的 2 个值生成 MsgBox

根据不同单元格中的 2 个值生成 MsgBox

我完全是 VBA 新手,正在尝试实现以下目标,但没有成功。非常感谢您的帮助。

我需要实现的目标:
如果有人为每一行选择 Action = “Delete” AND Summary = “True”,则 MsgBox “Alert: 如果删除该块,子网络和主机也将被删除

在此处输入图片描述 这应该可以适用于 A、B 1-202 的所有行

我知道我需要做什么,但我不知道语法。以下是我已经整理好的。只有当我选择 A2 =“删除”时,它才有效。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2:A138")) Is Nothing Then
        Select Case Range("A2")
            Case "Delete": MsgBox "Alert:   If the Block is deleted, the child networks and hosts will also be deleted"
           
        End Select
    End If
    End Sub

答案1

您几乎已经到达目标了,做得好!

仅当我选择 A2 =“删除”时它才有效。

那是因为:Select Case Range("A2")。你只告诉它查看A2。如果你想让它查看任何更改的行的 A 列中的值,你可以使用这个:Select Case Range("A" & Target.Row)。函数内的引用Range()是字符串,因此它们的工作方式与工作表中的函数相同Indirect()。你可以将它们拼凑在一起。

此外,没有检查用户是否也在 B 列中选择了“True”。下面的代码是我为您量身定制的解决方案。我偏爱嵌套If语句,只是因为我用得更多,Select Case但您可以将其重新设计成您最满意的格式。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2:B138")) Is Nothing Then
        If UCase(Range("A" & Target.Row)) = "DELETE" Then
            If UCase(Range("B" & Target.Row)) = "TRUE" Then
                MsgBox "Alert:   If the Block is deleted, the child networks and hosts will also be deleted", vbOKOnly + vbExclamation
            End If
        End If
    End If
End Sub

这里有一些功能与问题中的代码不同。

  1. 我扩大了Intersect范围以包括 B 列,以便任一列的更改都会触发该子程序。
  2. 我使用 转换范围值UCase并将其与 进行比较,DELETE因为默认比较是二进制的,而不是基于文本的,因此DeletedElEtE不相等。如果您的用户输入“delete”而不是使用下拉列表,此代码仍将有效。
  3. 我添加了对 B 列值的检查。
  4. 我用 美化了您的消息框vbExclamation

截屏

相关内容