7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim sText As String Dim sList As String Dim objCell As Range If TypeName(Selection) <> "Range" Then Exit Sub If Target.Cells.Count > 1 Then Exit Sub If Application.Intersect(Target, Range(gsDropDownDisplayRange)) Is Nothing Then Target.Validation.Delete Exit Sub End If
sText = Target.Value With Selection.Validation If Len(sText) = 0 Then .Delete .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, _ Formula1:="=" & gsNamedRange Else For Each objCell In Range(gsNamedRange) If InStr(1, objCell.Value, sText, vbTextCompare) = 1 Then sList = sList & objCell.Value & Chr(&H2C) End If Next Selection.Value = sText .Delete If Len(sList) = 0 Then .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, _ Formula1:="=" & gsNamedRange Else .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, _ Formula1:="A,B,C" .Delete .Add Type:=xlValidateList, _ AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, _ Formula1:="=" & gsNamedRangeReduced End If End If End With End Sub
|