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

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить

Актуальна ли тема

Опрос закончился 15 окт 2009, 15:09

Нет
0
Голосов нет
Да
0
Голосов нет
Это более продвинутый форум
0
Голосов нет
 
Всего голосов: 0
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

: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

С уважением...
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Рассмотрим часть кода:

Код: Выделить всё

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
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте seergy.
EducatedFool верно указал на причину проблемы, но судя по Вашему вопросу "значения из 8 Textbox's разносятся в 8 ячеек" мне кажется во вложении второго цикла нет необходимости совсем, массив заполняется одномерный

Код: Выделить всё

For iCount = 1 To 8
        Cells(NextRow + 1, iCount) = Me.Controls("TextBox" & iCount).Text
Next
советую вынести команды форматирования ячеек за пределы цикла и задавать формат всего диапазона ячеек одновременно (рекомендация Microsoft)
Евгений.
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Не помагает. Вот это поюзайте .....
С уважением...
Вот как правильно
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
Спасибо всем.......
Вложения
Контролы.zip
(19.49 КБ) 35 скачиваний
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте seergy
"Не помагает. Вот это поюзайте ...." :confused:
В Вашем примере неверно построено вложение циклов.
Евгений.
Вложения
Контролы.zip
(15.39 КБ) 32 скачивания
seergy
Сообщения: 109
Зарегистрирован: 25 ноя 2007, 21:31

Да вы правы. Пришёл к тому же мнению...
Спасибо за оперативную помощь...
С уважением...
Ответить