VBA文本框,需要2个单元格的多个引用

时间:2019-05-24 23:12:05

标签: excel vba

我要说的是,我的VBA技能是nada。因此,对于这是一个基本问题,我深表歉意,因为我看过不同的YouTube视频和excel论坛,而他们提供的示例在尝试编写代码时不起作用。

当在表1,单元格D11和D13中输入以下单词时,我需要一个VBA代码:纽约,堪萨斯州和俄亥俄州及其缩写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最初可以正常工作,但是在我尝试添加更多作品和味精盒装方案后,由于某种原因它破裂了,即使删除并重写它,该代码现在也无法正常工作。

代码2要么给我一个结束块错误。

3 个答案:

答案 0 :(得分:1)

这是测试众多条目之一的一种方法:

编辑以显示多个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

答案 1 :(得分:1)

我认为您在获得它之前就放弃了...请参见下面基于您的示例...我改用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

答案 2 :(得分:0)

只需说,使用DarXyde中显示的'case'和'selection change'回答了应该走的路,但是随着您的学习,这种简单的方法可能会有所帮助。

请注意,区分大小写将是一个问题,通过一些研究,您应该可以对问题的答案进行修改,以解决区分大小写的问题。

您与代码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

使用exit子程序是为了一旦找到匹配项就结束该子程序,因此无需进一步检查。