vba msgbox绑定到条件格式,工作表具有多个字符串

时间:2019-05-31 14:50:23

标签: excel-vba conditional-formatting msgbox

我目前有一个已经创建的工作簿,该工作簿已经具有2个特定单元的VBA msgbox代码输入。但是,我需要为已有条件格式的2个其他单元格添加其他文本框代码。 当前,如果在下拉菜单上选择“否”,则条件格式会将单元格颜色更改为绿色,如果选择“是”,则将其变为红色。

仅当选择“是”时,我才需要创建msgbox代码,并弹出vbcaution msgbox。

我尝试使用VBYesNo代码,但是,这似乎与VBbuttons绑定在一起,而不是我想要的。此外,由于此工作表已经有专门写给与该所需功能无关的其他单元的代码。如何创建额外的代码,使之不会出现编译或语法错误?

此工作表已经存在的当前代码,我无法让其他代码干扰:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim C As Range
    If Not Intersect(Target, Range("D11:D13")) Is Nothing Then
        For Each C In Intersect(Target, Range("D11:D13"))
            Select Case C.Value2
                Case "Kansas", "KS"
                    MsgBox "Test 1"
                Case "Ohio", "OH"
                    MsgBox "Test 2"
                Case "New York", "NY"
                    MsgBox "Test 3"
            End Select
        Next C
    End If
End Sub

我希望该代码仅在为单元格D17和D21选择“是”时才发出msgbox,并且由于已经为该位置编写了msgbox代码,因此不需要创建编译或语法错误该工作簿。

1 个答案:

答案 0 :(得分:0)

以下代码不会干扰您的其他代码。我已经将新代码和原始代码都包含在一个vba脚本中。

为使代码正常运行,D17和D21的事件触发器都需要分开,否则,如果D17已经填充“是”,然后对D21进行了更改,则由于D17值而将触发事件更改反之亦然。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Ans As Variant
Dim C As Range

If Not Intersect(Target, Range("D17")) Is Nothing Then

If Range("D17").Value = "Yes" Then

    Ans = MsgBox("Your warning goes here.", vbYesNo)

       Select Case Ans
            Case vbYes
                ' If Yes then the yes code goes here

            Case vbNo
                ' If No then the yes code goes here
        End Select

    End If

End If


If Not Intersect(Target, Range("D21")) Is Nothing Then

    If Range("D21").Value = "Yes" Then

        Ans = MsgBox("Your warning goes here.", vbYesNo)

        Select Case Ans
            Case vbYes
                ' If Yes then the yes code goes here

            Case vbNo
                ' If No then the yes code goes here
        End Select

    End If

End If

' Your piece of code:

If Not Intersect(Target, Range("D11:D13")) Is Nothing Then
    For Each C In Intersect(Target, Range("D11:D13"))
        Select Case C.Value2
            Case "Kansas", "KS"
                MsgBox "Test 1"
            Case "Ohio", "OH"
                MsgBox "Test 2"
            Case "New York", "NY"
                MsgBox "Test 3"
        End Select
    Next C
End If

End Sub