【问题标题】:vba msgbox tied to conditional formatting, worksheet has multiple stringsvba msgbox 绑定到条件格式,工作表有多个字符串
【发布时间】:2019-05-31 14:50:23
【问题描述】:

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

我需要创建一个 msgbox 代码,只有在选择“yes”时,才会弹出 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 代码已经编写并到位而导致编译或语法错误这个工作簿。

【问题讨论】:

  • 这些是数据验证下拉菜单吗?看起来您只需要再次检查 D17 和 D21 的值。不确定“VBbuttons”是什么意思?

标签: excel vba conditional-formatting msgbox


【解决方案1】:

以下代码不会干扰您的其他代码。我已将两段新代码和您的原始代码都包含在一个 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

【讨论】:

    猜你喜欢
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2013-01-31
    相关资源
    最近更新 更多