Мне нужно ограничить пользователя, когда он пытается ввести некоторую строку в ячейку, этот ввод должен быть ограничен следующим списком: C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 ; слова: слияние, полный кадр, ширина, левая граница, правая граница и целые числа от 1 до 100, например:
С6 объединить 1, С4 объединить 1. Другие значения не допускаются, кроме этих.
Я до сих пор не могу найти точное регулярное выражение, которое должно использоваться, чтобы включить все правила выше. Вот мой код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strPattern As String
Dim regEx As RegExp
Dim vValues As Variant
Dim vValue As Variant
Dim strInput As String
Dim currCell As Range
Dim MyRange As Range
Set MyRange = ThisWorkbook.Worksheets("BY Blocks").Range("G3:G308")
If Not Intersect(Target, Range("G:G")) Is Nothing Then
strPattern = "the needed regex"
'strPattern = "\b(C(?:10|[1-9])),(merge|complete framed|width),(\d+)"
Set regEx = New RegExp
vValues = Split(Target, ",")
With regEx
'For Each currCell In MyRange
'If strPattern <> vbNullString Then
' strInput = currCell.Value
'End If
'Next currCell
For Each vValue In vValues
.Global = True
.IgnoreCase = False
.Pattern = strPattern
If .Test(Trim(vValue)) Then
MsgBox "Match found in " & Target.Value & " : " & Trim(vValue)
Else
MsgBox "No match"
End If
If (regEx.Execute(strInput)) Then
'"smth when the pattern is matched"
End If
End With
Set regEx = Nothing
End If
End Sub
На самом деле строковый шаблон неправильный, потому что он не находит соответствия в If.Условия тестирования (Trim (vValue))