MsgBox特定单元格包含特定文本时

时间:2017-03-17 19:45:59

标签: excel vba excel-vba

我希望每次单元格包含特定文本时都会显示弹出消息。每次单词“Red Level”都在这个单元格中(I22,I23,I34,I35,I36),我想要一个MsgBox出现。 我在上面提到的所有单元格中使用数据验证列表,以确保单词“Red Level”始终相同。

我写了一些代码并且它有效,但只有当我在我的范围内有1个单元格时。当我尝试将其他单元格编号添加到我的代码中时,它仍将仅适用于第一个单元格而不适用于其余单元格。

以下是适用于一个单元格的代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
    If Worksheets("A12").Range("I22").Value = "Red Level" Then
         MsgBox ("Please call maintenance immediately to refill reservoir")
    End If 
End Sub

我以为我可以将其余的单元格添加到我的代码范围内,但这不起作用。 这就是我所做的但是没有用(MsgBox只会出现在“红色等级”在I22而不是在其他单元格中):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Sheets("A12").Range("I22,I23,I34,I35,I36").Value = "Red Level" Then
         MsgBox ("Please call maintenance immediately to refill reservoir")
    End If
End Sub

4 个答案:

答案 0 :(得分:3)

您可以使用工作表的MATCH,但它不适用于不连续的单元格,因此必须进行两次检查。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    if not iserror(application.match("red level", Range("I22:I23"), 0)) or _
       not iserror(application.match("red level", Range("I34:I36"), 0)) then
         'Red Level is is at least one of the discontiguous cells
         MsgBox ("Please call maintenance immediately to refill reservoir")
    end if
End Sub

目前尚不清楚究竟是什么驱动了红色等级'出现在范围内(" I22:I23,I34:I36")。这可能更适合作为Worksheet_Change。因此,如果一个或多个单元格保持“红色等级”,则用户无法浏览工作表。

在相关说明中:这是在A12工作表的代码表中吗?如果是这样(作为工作表&代码表中的私有子),则不需要使用Worksheets("A12")定义父工作表。我的代码删除了父工作表引用。

答案 1 :(得分:2)

为此,您可以采用两种方式(至少)。如果您想与public int? associated_user_id; 保持联系,则需要大量If

Or

但正如你所看到的,这将是一个非常长的路线,这不是最直接的阅读。这是另一种选择:

If Sheets("A12").Range("I22").Value = "Red Level" or Sheets("A12").Range("I23").Value = "Red Level" or ... Then

注意第二个只会触发一次,即使所有单元格都有“红色等级”,或者只有一个单元格有它。如果你想提醒用户有哪些单元格,你可以添加它,请告诉我。

答案 2 :(得分:0)

DATA选项卡有一个用于数据验证的向导, 第一个选项卡允许您定义条件。 此向导的第三个选项卡用于弹出消息。

你不需要为此编写代码,它已经内置于excel中。

http://www.excel-easy.com/basics/data-validation.html

答案 3 :(得分:0)

为什么不在想要的细胞范围内使用find?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Worksheets("A12").Range("I22,I23,I34:I36").Find(what:="Red Level", LookIn:=xlValues, lookat:=xlWhole) Is Nothing Then MsgBox "Please call maintenance immediately to refill reservoir"
End Sub

并且,正如@Jeeped已经说过的,如果您监视事件的工作表是以“A12”命名的,那么您可以省略Worksheets("A12").部分