Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Добавление дополнительных полей в форме ввода данных - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление дополнительных полей в форме ввода данных (Макросы/Sub)
Добавление дополнительных полей в форме ввода данных
Born_IN_USSR Дата: Четверг, 26.01.2017, 14:06 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый день!
Прошу помощи. Начал изучать создание форм для ввода данных. И все бы хорошо, но нигде не могу найти информацию о добавление дополнительных полей в самой форме (если это конечно возможно). Т.е. есть есть форма для ввода данных в таблицу, которая состоит из трёх выпадающих списков (данные берутся с листа "Справочник") и одного текстового поля - данные вносятся вручную. После нажатия на кнопку "Внести данные" все переносится в таблицу на листе "Данные".
Первое в чем нужна помощь - при нажатии кнопки "Добавить строку" добавлялись аналогичные поля (3 комбобокса и один текстбокс) чуть ниже.
Второе - после заполнения значений во вновь добавленных строках формы также бы добавлялись в таблицу. Файл прикладываю. Заранее спасибо за помощь!

[p.s.] Сразу оговорюсь. Задача стоит таким образом, чтобы поля добавлялись по мере их необходимости, т.к. форма для ввода данных используется для заполнения вручную с бумажных носителей, т.о. число полей не постоянно и каждый раз меняется
К сообщению приложен файл: 6379266.xlsm (34.7 Kb)


Сообщение отредактировал Born_IN_USSR - Четверг, 26.01.2017, 16:15
 
Ответить
СообщениеДобрый день!
Прошу помощи. Начал изучать создание форм для ввода данных. И все бы хорошо, но нигде не могу найти информацию о добавление дополнительных полей в самой форме (если это конечно возможно). Т.е. есть есть форма для ввода данных в таблицу, которая состоит из трёх выпадающих списков (данные берутся с листа "Справочник") и одного текстового поля - данные вносятся вручную. После нажатия на кнопку "Внести данные" все переносится в таблицу на листе "Данные".
Первое в чем нужна помощь - при нажатии кнопки "Добавить строку" добавлялись аналогичные поля (3 комбобокса и один текстбокс) чуть ниже.
Второе - после заполнения значений во вновь добавленных строках формы также бы добавлялись в таблицу. Файл прикладываю. Заранее спасибо за помощь!

[p.s.] Сразу оговорюсь. Задача стоит таким образом, чтобы поля добавлялись по мере их необходимости, т.к. форма для ввода данных используется для заполнения вручную с бумажных носителей, т.о. число полей не постоянно и каждый раз меняется

Автор - Born_IN_USSR
Дата добавления - 26.01.2017 в 14:06
Born_IN_USSR Дата: Понедельник, 30.01.2017, 16:23 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Никто не хочет помочь? (((
Порылся я на просторах интернета и на англоязычном сайте наткнулся на
[vba]
Код
Set Control = object.Add( ProgID [, Name [, Visible]])
[/vba]
При помощи него сейчас добавляется ComboBox. (Выпадающий список 1)
Первый вопрос - как добавить сразу несколько полей - еще 2 (два) ComboBox (Выпадающий список 2 и 3) и один TextBox (Значение).
Второй вопрос - как сделать, чтобы при нажатии кнопки "Добавить строки". все последующие строки автоматом смещались ниже?
Ну и третий вопрос

Цитата
после заполнения вновь добавленных строк значения из них также добавлялись в таблицу
К сообщению приложен файл: 1687640.xlsm (34.4 Kb)
 
Ответить
СообщениеНикто не хочет помочь? (((
Порылся я на просторах интернета и на англоязычном сайте наткнулся на
[vba]
Код
Set Control = object.Add( ProgID [, Name [, Visible]])
[/vba]
При помощи него сейчас добавляется ComboBox. (Выпадающий список 1)
Первый вопрос - как добавить сразу несколько полей - еще 2 (два) ComboBox (Выпадающий список 2 и 3) и один TextBox (Значение).
Второй вопрос - как сделать, чтобы при нажатии кнопки "Добавить строки". все последующие строки автоматом смещались ниже?
Ну и третий вопрос

Цитата
после заполнения вновь добавленных строк значения из них также добавлялись в таблицу

Автор - Born_IN_USSR
Дата добавления - 30.01.2017 в 16:23
nilem Дата: Понедельник, 30.01.2017, 16:57 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Можно завести на форме столько контролов, сколько может понадобиться по максимуму, но временно ненужные скрыть (Visible=False), и по мере необходимости открывать.
Или можно по кнопке увеличивать высоту формы, чтобы с каждым разом отображалась еще одна строка контролов.
Имхо так проще.


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеМожно завести на форме столько контролов, сколько может понадобиться по максимуму, но временно ненужные скрыть (Visible=False), и по мере необходимости открывать.
Или можно по кнопке увеличивать высоту формы, чтобы с каждым разом отображалась еще одна строка контролов.
Имхо так проще.

Автор - nilem
Дата добавления - 30.01.2017 в 16:57
Pelena Дата: Понедельник, 30.01.2017, 16:57 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Зачем Вам это? После нажатия кнопки Внести данные (и заполнения таблицы на листе) очищайте комбобоксы и вводите в них новые значения


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗачем Вам это? После нажатия кнопки Внести данные (и заполнения таблицы на листе) очищайте комбобоксы и вводите в них новые значения

Автор - Pelena
Дата добавления - 30.01.2017 в 16:57
sboy Дата: Понедельник, 30.01.2017, 16:59 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Мне кажется, что Вы себе усложняете задачу.
Если вводите построчно, то зачем каждый раз прорисовывать контролы?
Я бы предложил оставить одну строку контролов и сделать 2 кнопки "добавить данные и закрыть форму", "добавить данные и остаться в форме".
При нажатии на вторую переносим данные и очищаем значения в форме, позволяя пользователю вносить следующую строку


Яндекс: 410016850021169
 
Ответить
СообщениеДобрый день.
Мне кажется, что Вы себе усложняете задачу.
Если вводите построчно, то зачем каждый раз прорисовывать контролы?
Я бы предложил оставить одну строку контролов и сделать 2 кнопки "добавить данные и закрыть форму", "добавить данные и остаться в форме".
При нажатии на вторую переносим данные и очищаем значения в форме, позволяя пользователю вносить следующую строку

Автор - sboy
Дата добавления - 30.01.2017 в 16:59
Born_IN_USSR Дата: Понедельник, 30.01.2017, 22:24 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Мне кажется, что Вы себе усложняете задачу.

Хочется, чтобы форма была динамически, в зависимости от полей и строк, изменялась.

Можно завести на форме столько контролов, сколько может понадобиться по максимуму, но временно ненужные скрыть

Трудно предположить какое будет максимальное кол-во строк
 
Ответить
Сообщение
Мне кажется, что Вы себе усложняете задачу.

Хочется, чтобы форма была динамически, в зависимости от полей и строк, изменялась.

Можно завести на форме столько контролов, сколько может понадобиться по максимуму, но временно ненужные скрыть

Трудно предположить какое будет максимальное кол-во строк

Автор - Born_IN_USSR
Дата добавления - 30.01.2017 в 22:24
Pelena Дата: Понедельник, 30.01.2017, 22:31 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Born_IN_USSR, добавить программно комбобоксы - это не самое сложное. Но придётся ведь добавлять к каждой такой строке и свою кнопку Добавить в таблицу и потом с танцами с бубном обрабатывать её нажатие. Или как-то по-другому планируете действовать?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеBorn_IN_USSR, добавить программно комбобоксы - это не самое сложное. Но придётся ведь добавлять к каждой такой строке и свою кнопку Добавить в таблицу и потом с танцами с бубном обрабатывать её нажатие. Или как-то по-другому планируете действовать?

Автор - Pelena
Дата добавления - 30.01.2017 в 22:31
Born_IN_USSR Дата: Понедельник, 30.01.2017, 22:39 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Или как-то по-другому планируете действовать?

Понимаю, что будет не легко. Но хочу попробовать.
Пока только получилось получить вторую строчку. Соответсвенно, хочется написать код чтобы автоматом добавлялись.
Я так понимаю надо указать переменную которая будет определять местоположение следующей строки. Но не могу сообразить как (
Или я вообще не в том направлении думаю?
К сообщению приложен файл: 4797534.xlsm (35.9 Kb)
 
Ответить
Сообщение
Или как-то по-другому планируете действовать?

Понимаю, что будет не легко. Но хочу попробовать.
Пока только получилось получить вторую строчку. Соответсвенно, хочется написать код чтобы автоматом добавлялись.
Я так понимаю надо указать переменную которая будет определять местоположение следующей строки. Но не могу сообразить как (
Или я вообще не в том направлении думаю?

Автор - Born_IN_USSR
Дата добавления - 30.01.2017 в 22:39
sboy Дата: Вторник, 31.01.2017, 11:10 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Трудно предположить какое будет максимальное кол-во строк

Если их будет 50? (да хотя бы 20) Вы представляете как эта форма будет выглядеть на экране?


Яндекс: 410016850021169
 
Ответить
Сообщение
Трудно предположить какое будет максимальное кол-во строк

Если их будет 50? (да хотя бы 20) Вы представляете как эта форма будет выглядеть на экране?

Автор - sboy
Дата добавления - 31.01.2017 в 11:10
Born_IN_USSR Дата: Вторник, 31.01.2017, 11:11 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Если их будет 50? (да хотя бы 20) Вы представляете как эта форма будет выглядеть на экране?

Да, представляю. Меня это не пугает
 
Ответить
Сообщение
Если их будет 50? (да хотя бы 20) Вы представляете как эта форма будет выглядеть на экране?

Да, представляю. Меня это не пугает

Автор - Born_IN_USSR
Дата добавления - 31.01.2017 в 11:11
sboy Дата: Вторник, 31.01.2017, 11:51 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Меня это не пугает

Тогда держите. Сделал только
Пока только получилось получить вторую строчку. Соответсвенно, хочется написать код чтобы автоматом добавлялись

Без переноса данных на лист...
К сообщению приложен файл: 4423330.xlsm (28.2 Kb)


Яндекс: 410016850021169
 
Ответить
Сообщение
Меня это не пугает

Тогда держите. Сделал только
Пока только получилось получить вторую строчку. Соответсвенно, хочется написать код чтобы автоматом добавлялись

Без переноса данных на лист...

Автор - sboy
Дата добавления - 31.01.2017 в 11:51
Born_IN_USSR Дата: Вторник, 31.01.2017, 11:54 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Тогда держите. Сделал только

Здорово!!! То что надо!!! Спасибо огромное!!!
Осталось только теперь переносить эти данные на лист)))
 
Ответить
Сообщение
Тогда держите. Сделал только

Здорово!!! То что надо!!! Спасибо огромное!!!
Осталось только теперь переносить эти данные на лист)))

Автор - Born_IN_USSR
Дата добавления - 31.01.2017 в 11:54
sboy Дата: Вторник, 31.01.2017, 12:56 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Осталось только теперь переносить эти данные на лист)))

кнопку Добавить в таблицу и потом с танцами с бубном обрабатывать её нажатие


Яндекс: 410016850021169
 
Ответить
Сообщение
Осталось только теперь переносить эти данные на лист)))

кнопку Добавить в таблицу и потом с танцами с бубном обрабатывать её нажатие

Автор - sboy
Дата добавления - 31.01.2017 в 12:56
Born_IN_USSR Дата: Среда, 01.02.2017, 15:52 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Продолжаю биться с неравной силой %) )))
Итак, хотелось бы описать какой у меня алгоритм по переносу данных из формы.
1. Определить кол-во элементов управления которые были созданы при нажатии "Добавить строку"
2. Присвоение порядкового номера (индекса) каждому элементу управления.
3. Перенос данных из ЭУ в соответсвующие ячейки таблицы.

Соответсвенно вопросы:
1. Как подсчитать кол-во ЭУ ?
2. Как присвоить индекс каждому элементу
3. По третьему пункту. Есть код, который переносит данные из первого выпадающего списка в таблицу
Код
Worksheets("Данные").Cells(i + 1, 2).Value = List1.Text

Можно ли его и дальше использовать для переноса данных из вновь созданных ЭУ ?
 
Ответить
СообщениеПродолжаю биться с неравной силой %) )))
Итак, хотелось бы описать какой у меня алгоритм по переносу данных из формы.
1. Определить кол-во элементов управления которые были созданы при нажатии "Добавить строку"
2. Присвоение порядкового номера (индекса) каждому элементу управления.
3. Перенос данных из ЭУ в соответсвующие ячейки таблицы.

Соответсвенно вопросы:
1. Как подсчитать кол-во ЭУ ?
2. Как присвоить индекс каждому элементу
3. По третьему пункту. Есть код, который переносит данные из первого выпадающего списка в таблицу
Код
Worksheets("Данные").Cells(i + 1, 2).Value = List1.Text

Можно ли его и дальше использовать для переноса данных из вновь созданных ЭУ ?

Автор - Born_IN_USSR
Дата добавления - 01.02.2017 в 15:52
K-SerJC Дата: Среда, 01.02.2017, 16:24 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
Можно ли его и дальше использовать для переноса данных из вновь созданных ЭУ ?

так обращаться к созданным ЭУ, не получиться, т.к. вы не можете сразу в коде прописать имя элемента управления, которого нет(List2,List3 и т.д.)...


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщение
Можно ли его и дальше использовать для переноса данных из вновь созданных ЭУ ?

так обращаться к созданным ЭУ, не получиться, т.к. вы не можете сразу в коде прописать имя элемента управления, которого нет(List2,List3 и т.д.)...

Автор - K-SerJC
Дата добавления - 01.02.2017 в 16:24
K-SerJC Дата: Среда, 01.02.2017, 16:40 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
вот так можете получить список имен ЭУ, в порядке индексов от 0 до ...
[vba]
Код
Function ControlsName() As Collection
Dim f
Set ControlsName = New Collection
For f = 0 To UserForm1.Controls.Count - 1
ControlsName.Add UserForm1.Controls(f).Name
Next f
End Function
[/vba]
в код по кнопке записи данных добавить:
[vba]
Код
Dim names As Collection
Set names = ControlsName
[/vba]
где f индекс контрола list1

а дальше по имени из names и порядковому номеру определять куда из этого контрола данные перемещать...
[vba]
Код
cells(1,1).value = UserForm1.Controls(f).text
[/vba]


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJC - Среда, 01.02.2017, 16:47
 
Ответить
Сообщениевот так можете получить список имен ЭУ, в порядке индексов от 0 до ...
[vba]
Код
Function ControlsName() As Collection
Dim f
Set ControlsName = New Collection
For f = 0 To UserForm1.Controls.Count - 1
ControlsName.Add UserForm1.Controls(f).Name
Next f
End Function
[/vba]
в код по кнопке записи данных добавить:
[vba]
Код
Dim names As Collection
Set names = ControlsName
[/vba]
где f индекс контрола list1

а дальше по имени из names и порядковому номеру определять куда из этого контрола данные перемещать...
[vba]
Код
cells(1,1).value = UserForm1.Controls(f).text
[/vba]

Автор - K-SerJC
Дата добавления - 01.02.2017 в 16:40
Born_IN_USSR Дата: Среда, 01.02.2017, 22:43 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Я правильно Вас понял
где f индекс контрола list1

это надо для каждого моего ЭУ прописывать ? Т.е. у меня еще должно, к примеру, появиться индексы d, e ?


Сообщение отредактировал Born_IN_USSR - Среда, 01.02.2017, 22:44
 
Ответить
СообщениеЯ правильно Вас понял
где f индекс контрола list1

это надо для каждого моего ЭУ прописывать ? Т.е. у меня еще должно, к примеру, появиться индексы d, e ?

Автор - Born_IN_USSR
Дата добавления - 01.02.2017 в 22:43
K-SerJC Дата: Четверг, 02.02.2017, 08:00 | Сообщение № 18
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
Т.е. у меня еще должно, к примеру, появиться индексы d, e ?

нет, функицию я вам написал, она в порядке чередования индексов заносит имена контролов в коллекцию
по именам в коллекции вы сможете определить какой индекс ставить при обращении
индексы автоматом присваиваются при добавлении элементов на форму, в порядке добавления
например в цикле по names, поставить условие
[vba]
Код
for f=1 to names.count
If names(f).name = "List1" then cells(1,1).value = UserForm1.Controls(f).text
next f
[/vba]

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

т.е. вам нужно составить условие по которому в коллекции добавленых элементов определяется нужный индекс, затем вы переносите данные в ячейку с нужного элемента


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщение
Т.е. у меня еще должно, к примеру, появиться индексы d, e ?

нет, функицию я вам написал, она в порядке чередования индексов заносит имена контролов в коллекцию
по именам в коллекции вы сможете определить какой индекс ставить при обращении
индексы автоматом присваиваются при добавлении элементов на форму, в порядке добавления
например в цикле по names, поставить условие
[vba]
Код
for f=1 to names.count
If names(f).name = "List1" then cells(1,1).value = UserForm1.Controls(f).text
next f
[/vba]

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

т.е. вам нужно составить условие по которому в коллекции добавленых элементов определяется нужный индекс, затем вы переносите данные в ячейку с нужного элемента

Автор - K-SerJC
Дата добавления - 02.02.2017 в 08:00
Pelena Дата: Четверг, 02.02.2017, 12:27 | Сообщение № 19
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Немного по-другому сделала. Проверьте
К сообщению приложен файл: Born_IN_USSR_1.xlsm (37.3 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеНемного по-другому сделала. Проверьте

Автор - Pelena
Дата добавления - 02.02.2017 в 12:27
Born_IN_USSR Дата: Четверг, 02.02.2017, 12:33 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Немного по-другому сделала. Проверьте

Все работает !!! ОГРОМНОЕ СПАСИБО!!!
Сейчас теперь пытаюсь разобраться с кодом, потом отпишусь.
ЕЩЕ РАЗ ОГРОМНОЕ СПАСИБО!!!
 
Ответить
Сообщение
Немного по-другому сделала. Проверьте

Все работает !!! ОГРОМНОЕ СПАСИБО!!!
Сейчас теперь пытаюсь разобраться с кодом, потом отпишусь.
ЕЩЕ РАЗ ОГРОМНОЕ СПАСИБО!!!

Автор - Born_IN_USSR
Дата добавления - 02.02.2017 в 12:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Добавление дополнительных полей в форме ввода данных (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!