vba msgbox привязан к условному форматированию, на листе есть несколько строк - PullRequest
0 голосов
/ 31 мая 2019

В настоящее время у меня есть созданная книга, в которой уже есть код ввода VBA msgbox для 2 определенных ячеек.Однако мне нужно добавить дополнительный код текстового поля для 2 дополнительных ячеек, которые уже имеют условное форматирование.В настоящее время условное форматирование меняет цвет ячейки на зеленый, если в раскрывающемся меню выбрано «нет», и становится красным, если выбрано «да».

Мне нужно создать код msgbox, только когда »Да ", с всплывающим vbcaution msgbox.

Я пытался использовать код VBYesNo, однако, похоже, что он связан с кнопками VB, а не был, который я искал.Кроме того, поскольку этот лист уже имеет код, написанный специально для других ячеек, не связанных с этой необходимой функцией.Как мне создать дополнительный код, чтобы у меня не было ошибки компиляции или синтаксиса?

Текущий код, который уже существует для этого листа, которому не может помешать дополнительный код:

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

Я бы хотел, чтобы код выдавал msgbox только в том случае, если для ячеек D17 и D21 выбрано «да», и чтобы он не создавал ошибку компиляции или синтаксиса из-за уже написанного кода msgboxи на месте для этой книги.

1 Ответ

0 голосов
/ 03 июня 2019

Следующий код не будет мешать вашему другому коду.Я включил обе части нового кода и ваш исходный код в один скрипт 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
...