У меня есть пользовательская форма с десятками текстовых полей, где пользователь должен вводить только числа от 1 до 6. Когда форма будет завершена, пользователь нажимает кнопку «Сохранить», а числа добавляются в Excel Таблица.проверьте, IsNumeric использует Me.Controls()
Как текстовые поля довольно много, я использовал следующий код, чтобы прочитать их значение:
' Text boxes name are: txt_a01, txt_a02, txt_a03...
For i = 1 To 5
ws.Cells(iRow, i).Value = Me.Controls("txt_a0" & i).Value
Next
' Here text boxes name are: txt_b01, txt_b02, txt_b03...
For i = 6 To 10
ws.Cells(iRow, i).Value = Me.Controls("txt_b0" & i - 5).Value
Next
etc.
, а не писать в десятки раз:
ws.Cells(iRow, 1).Value = Me.txt_a01.Value
ws.Cells(iRow, 2).Value = Me.txt_a02.Value
ws.Cells(iRow, 3).Value = Me.txt_a03.Value
ws.Cells(iRow, 4).Value = Me.txt_a04.Value
ws.Cells(iRow, 5).Value = Me.txt_a05.Value
Теперь я хотел бы проверить - во время ввода - если пользователь действительно добавил номер, и если его между 1 и 6. Обычно я бы сделал это следующим образом:
Private Sub txt_a01_AfterUpdate()
If Not IsNumeric(txt_a01.Value) Then
MsgBox ("Only numbers accepted")
End If
End Sub
Но поскольку я использую FOR-LOOP и Me.Controls() для чтения значений текстового поля, я не понимаю, как записать _AfterUpdate Sub.
Что вы хотите, чтобы произошло, если один из них не проходит тест? Просто игнорируйте это значение или не пишите никаких значений или что-то еще? – Rory