Добрый день!
Помогите, пожалуйста, оптимизировать код.
Имеется файл с таблицей. В таблице условно 10 столбцов. Есть userform, в которой 7 текстбоксов и 10 OptionButton. Задача формы: добавление данных со всех текстбоксов в любые первые пустые ячейки определенного столбца (столбец зависит от выбранного OptionButton от 1 до 10).
С добавлением в пустые ячейки определенного столбца я разобрался:
Скрытый текст |
---|
Код |
---|
If OptionButton1.Value Then
For Each xCell In ActiveSheet.Columns(1).Cells
If Len(xCell) = 0 Then
xCell.Value = TextBox1.Value
Exit For
End If
Next
End If |
|
Но я не знаю как сделать так, чтобы данные добавлялись со всех текстбоксов формы (если, конечно, данные присутствуют в текстбоксе).Я догадался просто продублировать код для каждого текстбокса отдельно, и выглядит это вот так:
Скрытый текст |
---|
Код |
---|
If OptionButton1.Value Then
For Each xCell In ActiveSheet.Columns(1).Cells
If Len(xCell) = 0 Then
xCell.Value = TextBox1.Value
Exit For
End If
Next
End If
If OptionButton1.Value Then
For Each xCell In ActiveSheet.Columns(1).Cells
If Len(xCell) = 0 Then
xCell.Value = TextBox2.Value
Exit For
End If
Next
End If
If OptionButton1.Value Then
For Each xCell In ActiveSheet.Columns(1).Cells
If Len(xCell) = 0 Then
xCell.Value = TextBox3.Value
Exit For
End If
Next
End If
If OptionButton1.Value Then
For Each xCell In ActiveSheet.Columns(1).Cells
If Len(xCell) = 0 Then
xCell.Value = TextBox4.Value
Exit For
End If
Next
End If
If OptionButton1.Value Then
For Each xCell In ActiveSheet.Columns(1).Cells
If Len(xCell) = 0 Then
xCell.Value = TextBox5.Value
Exit For
End If
Next
End If
If OptionButton1.Value Then
For Each xCell In ActiveSheet.Columns(1).Cells
If Len(xCell) = 0 Then
xCell.Value = TextBox6.Value
Exit For
End If
Next
End If
If OptionButton1.Value Then
For Each xCell In ActiveSheet.Columns(1).Cells
If Len(xCell) = 0 Then
xCell.Value = TextBox7.Value
Exit For
End If
Next
End If |
|
Это работает, данные не затирают друг-друга, но выходит очень массивно! А ведь опций OptionButton >= 10, и для каждой придется такой массив делать. Уверен, что есть более практичный, умный способ..
Форма открывается по нажатию ctrl+y.
И еще один момент уточнить, как сделать так, чтобы если не выбран столбец, то при нажатии кнопки выдавало бы предупреждение. Написал такой код, но не пойму как добавить туда остальные OptionButton (2,3, 4...), чтобы, выпадало предупреждение, если ничего выбрано:
Скрытый текст |
---|
Код |
---|
If OptionButton1.Value = "" Then
MsgBox "Выберите столбец", vbExclamation, "Ошибка"
Exit Sub
End If |
|