2014-09-24 2 views
0

Я работаю в Excel 2010, разрабатывая пользовательскую форму для ввода данных в электронную таблицу (мы не доверяем каждому конечному пользователю правильно вводить свои данные в открытую электронные таблицы).Используйте цикл, чтобы поместить данные в несколько разных текстовых полей

В настоящем время, каждый из текстового поля называются txtDataVal1 к N, с номером увеличивающимся с каждым новым поля, и следующий код используется для перемещения данных из текстового поля в таблицу:

'intRowSelect is given a value elsewhere, by the user's list box selection 
Cells(intRowSelect, 2).Value = txtDataVal1.Value 
Cells(intRowSelect, 3).Value = txtDataVal2.Value 
.... 
Cells(intRowSelect, 20).Value = txtDataVal20.value 

Моего вопрос: Есть ли способ написать простой цикл для увеличения числового значения в конце txtDataVal, поэтому у меня нет более 100 строк громоздкого кода выше?

Например (я знаю, что это нефункциональные пример, рассмотрим его псевдо-код):

Dim i as Integer 
Dim intColumnSelect as Integer 
intColumnSelect = 1 
i = 1 

Do While i < intColumnSelect 
intColumnSelect = intColumnSelect + 1 
Cells(intRowSelect, intColumnSelect).Value = "txtDataVal" + i.Value 
i = i + 1 
Loop 

ответ

0

В вашем цикле в то время как вы можете ссылаться на ваши текстовые поля как часть коллекции элементов управления формы, чтобы выполнить этот , Предполагая, что ваша форма называется FORM1:

Do While i < intColumnSelect 
    intColumnSelect = intColumnSelect + 1 
    Cells(intRowSelect, intColumnSelect).Value = FORM1.Controls("txtDataVal" & i).Value 
    i = i + 1 
Loop 
+0

Теперь я столкнулся с непредвиденной ошибкой. Используя приведенный выше код, я получаю «Ошибка времени выполнения» 13: Тип Несоответствие ». Кажется, у вас проблема с «txtDataVal» или + i, любая идея? – Munch

+0

Моя вина. Я использовал '+' вместо '&'. Один добавляет вещи вместе с другими конкатенатами ... не могу добавить строку :(Я обновил ответ. – JNevill

+1

Это билет! Спасибо. Я обнаружил недостаток в моей логике, хотя, где i и intColumnSelect в конечном итоге превысят количество текстовые поля в форме, вызывая ошибку (текстовое поле не существует для записи в!). Чтобы исправить это, я подсчитал используемые столбцы заголовков на листе с [кодом, который подсчитывает непустые столбцы, найденные здесь] (http: // stackoverflow.com/questions/6897347/finding-the-number-of-non-blank-columns-in-an-excel-sheet-using-vba) Код по-прежнему обрабатывает динамический номер столбца, а также динамическое число текстовые поля. Просто упомянуть будущих кодеров, которые находят это. Большое спасибо, J! – Munch

Смежные вопросы