Я пытаюсь проверить ввод ячейки с помощью двух функций регулярного выражения.
Идея состоит в том, что если значение в столбце C
равно "L", тогда используйте одну из двух функций. Проблема в том, что окна сообщений печатаются для каждого совпадения "L" или "T", и я хочу, чтобы по одному сообщению для каждой проверенной строки за раз.
Вот мой код:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Set rng1 = Range([c3], Cells(Rows.Count, "C").End(xlUp))
'Variable for splitting the cell string value
Dim a As Variant
Dim cell As Range
Dim msg As String
msg = ""
arr = Split(Target, " ")
For Each a In arr
If Target.Column = 11 And (Target.row > 2 And Target.row <= 308) Then
For Each cell In rng1
If (cell.value = "L") And (Target.row = 3) Then
If IsItGood(a) Then
'Gets the current cell + checks every splitted string whether it is a valid string in the list`s function
MsgBox (" In cell" + Target.row) & vbCrLf & a & vbCrLf + "is ok"
'If the above function is not true, displays another msgbox
Else
MsgBox (" In cell" + Target.Address(0, 0)) & vbCrLf & a & vbCrLf + "is invalid value"
'Because we won`t allow wrong values , this method undoes only the last action taken by the user before running the macro
Application.Undo
End If
End If
'End of for loop
Next cell
End If
Next a
For Each a In arr
If Target.Column = 11 And (Target.row > 2 And Target.row <= 308) Then
For Each cell In rng1
If (cell.value = "T") And (Target.row = 3) Then
If IsItGood2(a) Then
MsgBox (" In cell" + Target.Address(0, 0)) & vbCrLf & a & vbCrLf + "is ok"
Else
MsgBox (" In cell" + Target.Address(0, 0)) & vbCrLf & a & vbCrLf + "is invalid value"
Application.Undo
End If
End If
Next cell
End If
Next a
Application.EnableEvents = True
End Sub
Вот рабочий лист: