Страница 1 из 1
Цикл для "контролов"
Добавлено: 15 окт 2008, 15:08
seergy

На форме 8 Textbox's, Суть кода значения из 8 Textbox's разносятся в 8 ячеек.
Однако, все 8 ячеек заполняются знач . последнего Textbox.8

Помогите разобраться
Вод кусок кода:
Cells(NextRow +1, J) = Me.Controls("TextBox" & iCount).Text 'Value
NextRow = Application.WorksheetFunction.CountA(Range("dDAtоdD")) + 1
For J = 2 To 9
For iCount = 1 To 8
Cells(NextRow + 1, J) = Me.Controls("TextBox" & iCount).Text 'Value
With Worksheets("dDAtоdD").Cells(NextRow +1, J)
.Cells.Borders.LineStyle = xlContinuous
.WrapText = True
.Font.Size = 10
.Font.Name = "Times New Roman"
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.ReadingOrder = xlContext
.RowHeight = 16
End With
Next
Next J
С уважением...
Re: Цикл для "контролов"
Добавлено: 15 окт 2008, 17:45
EducatedFool
Рассмотрим часть кода:
Код: Выделить всё
For J = 2 To 9
For iCount = 1 To 8
Cells(NextRow + 1, J) = Me.Controls("TextBox" & iCount).Text
Next
Next J
Раскрываем внутренний цикл:
Код: Выделить всё
For J = 2 To 9
Cells(NextRow + 1, J) = Me.Controls("TextBox1").Text
Cells(NextRow + 1, J) = Me.Controls("TextBox2").Text
Cells(NextRow + 1, J) = Me.Controls("TextBox3").Text
Cells(NextRow + 1, J) = Me.Controls("TextBox4").Text
Cells(NextRow + 1, J) = Me.Controls("TextBox5").Text
Cells(NextRow + 1, J) = Me.Controls("TextBox6").Text
Cells(NextRow + 1, J) = Me.Controls("TextBox7").Text
Cells(NextRow + 1, J) = Me.Controls("TextBox8").Text
Next J
Теперь видно, что в одну и ту же ячейку записывались значения последовательно из всех TextBox. Последним было значение TextBox8, которое Вы и наблюдали
Попробуйте заменить
Cells(NextRow + 1, J) на
Cells(NextRow + iCount, J), или в конце цикла добавьте строку
NextRow=NextRow+1
Re: Цикл для "контролов"
Добавлено: 15 окт 2008, 19:37
Teslenko_EA
Здравствуйте
seergy.
EducatedFool верно указал на причину проблемы, но судя по Вашему вопросу
"значения из 8 Textbox's разносятся в 8 ячеек" мне кажется во вложении второго цикла нет необходимости совсем, массив заполняется одномерный
Код: Выделить всё
For iCount = 1 To 8
Cells(NextRow + 1, iCount) = Me.Controls("TextBox" & iCount).Text
Next
советую вынести команды форматирования ячеек за пределы цикла и задавать формат всего диапазона ячеек одновременно (рекомендация Microsoft)
Евгений.
Re: Цикл для "контролов"
Добавлено: 16 окт 2008, 11:39
seergy
Не помагает. Вот это поюзайте .....
С уважением...
Вот как правильно
For iCount = 6 To 13
Cells(NextRow + 5, iCount - 4) = Me.Controls("TextBox" & iCount).Text 'Value
With Worksheets("dDAtоdD").Cells(NextRow + 5, iCount - 4)
.Cells.Borders.LineStyle = xlContinuous
.WrapText = True
.Font.Size = 10
.Font.Name = "Times New Roman"
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.ReadingOrder = xlContext
.RowHeight = 16
End With
Next
Спасибо всем.......
Re: Цикл для "контролов"
Добавлено: 16 окт 2008, 22:27
Teslenko_EA
Здравствуйте
seergy
"Не помагает. Вот это поюзайте ...." 
В Вашем примере неверно построено вложение циклов.
Евгений.
Re: Цикл для "контролов"
Добавлено: 17 окт 2008, 07:19
seergy
Да вы правы. Пришёл к тому же мнению...
Спасибо за оперативную помощь...
С уважением...