我设置了一个工作表,由此在M列中输入了一个位置,但是它需要使用缩写来阻止人们-我正在尝试建立一个MsgBox,例如,如果在其中输入“ J / W”单元格var responseJson = client.UploadString(requestUrl, "POST", requestJson);
中的单元格,但似乎无法使其正常工作吗?我认为这将是如下的私人潜艇?
编辑:它需要搜索部分值,以便在完全输入文本后检查单元格。
M5:M1000
答案 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
如果不需要单独的消息框,则可以使用它。因此,您可以将所有缩写都放在列表中:
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。