MsgBox,如果单元格值包含部分文本

时间:2019-08-01 07:35:03

标签: excel vba

我设置了一个工作表,由此在M列中输入了一个位置,但是它需要使用缩写来阻止人们-我正在尝试建立一个MsgBox,例如,如果在其中输入“ J / W”单元格var responseJson = client.UploadString(requestUrl, "POST", requestJson); 中的单元格,但似乎无法使其正常工作吗?我认为这将是如下的私人潜艇?

编辑:它需要搜索部分值,以便在完全输入文本后检查单元格。

M5:M1000

3 个答案:

答案 0 :(得分:0)

在没有VBA的情况下,可以通过具有以下公式的自定义数据验证来实现:

=IF(ISNUMBER(FIND("J/W";M5;1));True())

答案 1 :(得分:0)

在编辑单元格后,立即使用Worksheet.Change event检查输入。然后,如果输入了不允许的内容,请使用Application.Undo撤消操作。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim AffectedRange As Range
    Set AffectedRange = Intersect(Target, Me.Range("M5:M1000"))  'check if change happened in the desired range

    If Not AffectedRange Is Nothing Then
        Dim Cell As Range
        For Each Cell In AffectedRange
            Select Case True
                Case InStr(1, Cell.Value, "J/W") > 0
                    MsgBox "do not use 'J/W'"
                    Application.Undo
                    Exit For

                Case InStr(1, Cell.Value, "c/o") > 0
                    MsgBox "do not use 'c/o'"
                    Application.Undo
                    Exit For
            End Select
        Next Cell
    End If
End Sub

enter image description here 图像1:如果插入了禁止的缩写之一,则撤消操作。

如果不需要单独的消息框,则可以使用它。因此,您可以将所有缩写都放在列表中:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim AffectedRange As Range
    Set AffectedRange = Intersect(Target, Me.Range("M5:M1000"))  'check if change happened in the desired range

    Dim NotAllowedList() As Variant
    NotAllowedList = Array("c/o", "J/W")

    If Not AffectedRange Is Nothing Then
        Dim FoundNotAllowed As Boolean
        Dim Cell As Range, NotAllowed As Variant
        For Each Cell In AffectedRange
            For Each NotAllowed In NotAllowedList
                If InStr(1, Cell.Value, NotAllowed, vbTextCompare) > 0 Then
                    FoundNotAllowed = True
                    Exit For
                End If
            Next NotAllowed

            If FoundNotAllowed Then Exit For
        Next Cell

        If FoundNotAllowed Then
            MsgBox "do not use abbreviations"
            Application.Undo
        End If
    End If
End Sub

答案 2 :(得分:-2)

我认为您必须将逻辑放入工作表事件中。 在VBE编辑器中,双击用户将输入数据的工作表的名称。 在出现的工作表模块中,使用选择更改事件,如下所示:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

 If Not IsError(Application.Match("J/W", Range("M5:M1000"), 0)) Then msgbox("write your message here")

End Sub

现在,如果有人输入J / w广告,请按Enter,然后弹出MSGbox。