Страница 1 из 1

Цикл для "контролов"

Добавлено: 15 окт 2008, 15:08
seergy
:confused:
На форме 8 Textbox's, Суть кода значения из 8 Textbox's разносятся в 8 ячеек.
Однако, все 8 ячеек заполняются знач . последнего Textbox.8 :confused: :confused:
:( Помогите разобраться

Вод кусок кода:

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
"Не помагает. Вот это поюзайте ...." :confused:
В Вашем примере неверно построено вложение циклов.
Евгений.

Re: Цикл для "контролов"

Добавлено: 17 окт 2008, 07:19
seergy
Да вы правы. Пришёл к тому же мнению...
Спасибо за оперативную помощь...
С уважением...