Код, который вы разместили, может уже работать, но я бы выбрал другой подход.
A серийный номер - это значение, которое должна вычислять система, а не вводить пользователь. Поэтому я предлагаю получить следующий серийный номер с функцией:
Private Function getNextSerial() As Long
Dim x As Long
Dim y As Worksheet
Set y = Sheets("Data")
x = y.Range("A" & Rows.Count).End(xlUp).Row
getNextSerial = y.Cells(x, "A").Value + 1
End Function
... и установить его прямо в TextBox1
при инициализации формы. Например, если ваша форма называется MyUserForm
, в событии Initialize()
этой формы вы должны указать что-то вроде этого:
Me.TextBox1.Text = getNextSerial() '<-- write next serial
Me.TextBox1.Locked = True '<-- forbid writing
Если вы действительно хотите использовать подход, в котором пользователь вводит серийный номер, тогда вы все равно можете использовать функцию getNextSerial()
и написать:
If Me.TextBox1.Text <= getNextSerial() Then
... однако, обратите внимание, что вы делаете это на TextBox.Change
мероприятии. Это означает, что если пользователь хочет ввести 1001 в качестве значения, с вашим текущим кодом он будет иметь:
- Набрав «1» ->
MsgBox
всплывающее окно
- Продолжаем с "10" ->
MsgBox
снова появляются
- Продолжаем с "100" ->
MsgBox
снова появляются!
- Завершить ввод "1001" -> Наконец!
... что вызвало бы сильное чувство ненависти со стороны пользователей по отношению к системе:)