Текстовое поле VBA, требующее нескольких ссылок на 2 ячейки - PullRequest
2 голосов
/ 25 мая 2019

Я скажу, что мои навыки VBA - это нада.Поэтому я прошу прощения, если это основной вопрос, так как я смотрел различные видео YouTube и форумы Excel, и приведенные ими примеры не работали при попытке написать код.

Мне нужен код VBA, когдаследующие слова вводятся в лист 1, ячейки D11 и D13: Нью-Йорк, Канзас и Огайо и их сокращения NY, KS и OH.Мне нужно 3 отдельных текстовых всплывающих окна, так как в каждом состоянии оно находится в определенных инструкциях.

Я пробовал запускать макрос, однако, поскольку он зависит от стольких переменных, я не смог найти подходящий код макроса, который охватываетчто мне было нужно.

Я попробовал эти коды ниже ... и я смог заставить код 1 работать, но когда я попытался добавить более одного "слова", код перестал работать.И когда я вернулся к исходному коду, по какой-то причине он не будет работать снова.

С кодом 2 я либо получаю ошибку, либо она не работает ...

Яза пределами разочарования в этой точке.: - (

Код 1)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D11:D13")) Is Nothing Then
        If Target = "Kansas" Then
            MsgBox "test 1."
        End If
    End If
End Sub

Код 2)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Range("D11:D13").Find(what:="Kansas", LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True) Is Nothing Then
        MsgBox "test 1"
    End If
End Sub

Код 1 работал изначально,но после того, как я попытался добавить больше работ и сценариев msg box, он сломался по какой-либо причине, даже удалив и переписав его, код теперь не будет работать.

Код 2 также выдаст мне ошибку End Block.

Ответы [ 3 ]

1 голос
/ 25 мая 2019

Я думаю, что вы сдались как раз перед тем, как получили его ... Смотрите ниже пример, основанный на вашем ... Я использовал SelectionChange вместо ...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("D11:D13")) Is Nothing Then
        Select Case Target
            Case "New York", "NY"
                MsgBox "New York found"
            Case "Kansas", "KS"
                MsgBox "Kansas found"
            Case "Ohio", "OH"
                MsgBox "Ohio found"
            Case Else
                MsgBox "Something found, but not:" _
                            & vbCrLf _
                            & "New York, Kansas, or Ohio.", _
                        vbCritical, _
                        "Just a message title"
        End Select
    End If
End Sub

1 голос
/ 25 мая 2019

Вот один из способов проверить одну из множества записей:

РЕДАКТИРОВАТЬ , чтобы отобразить несколько Case операторов

ПРИМЕЧАНИЕ. Если вам нужно сравнение без учета регистра,Вы можете добавить строку Option Compare Text в начале

Option Explicit
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"
                     ...some code
                etc
            End Select
        Next C
    End If
End Sub
0 голосов
/ 25 мая 2019

Просто скажу, что использование 'case' и 'selection selection', как показано в ответе DarXyde, будет правильным способом, но, как вы учитесь, этот простой метод может быть полезен.

Просто чтобы знать, что чувствительность к регистру будет проблемой, с небольшим исследованием вы сможете изменить ответы на свой вопрос, чтобы решить чувствительность к регистру.

Вы были очень близки с вашим кодом 1, вот как вы можете изменить его, чтобы он работал на вас.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("D11:D13")) Is Nothing Then

    If Target = "New York" or "NY" Then
        MsgBox "test 1."
        Exit Sub
    End If

    If Target = "Kansas" or "KS" Then
        MsgBox "test 2."
        Exit Sub
    End If

    If Target = "Ohio" or "OH" Then
        MsgBox "test 3."
        Exit Sub
    End If

End If 
End Sub

Использование выходного подпрограммы означает, что после того, как совпадение найдено, подпрограмма заканчивается, поэтому дальнейших проверок не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...