Добрый день! Прошу помощи. Начал изучать создание форм для ввода данных. И все бы хорошо, но нигде не могу найти информацию о добавление дополнительных полей в самой форме (если это конечно возможно). Т.е. есть есть форма для ввода данных в таблицу, которая состоит из трёх выпадающих списков (данные берутся с листа "Справочник") и одного текстового поля - данные вносятся вручную. После нажатия на кнопку "Внести данные" все переносится в таблицу на листе "Данные". Первое в чем нужна помощь - при нажатии кнопки "Добавить строку" добавлялись аналогичные поля (3 комбобокса и один текстбокс) чуть ниже. Второе - после заполнения значений во вновь добавленных строках формы также бы добавлялись в таблицу. Файл прикладываю. Заранее спасибо за помощь!
[p.s.] Сразу оговорюсь. Задача стоит таким образом, чтобы поля добавлялись по мере их необходимости, т.к. форма для ввода данных используется для заполнения вручную с бумажных носителей, т.о. число полей не постоянно и каждый раз меняется
Добрый день! Прошу помощи. Начал изучать создание форм для ввода данных. И все бы хорошо, но нигде не могу найти информацию о добавление дополнительных полей в самой форме (если это конечно возможно). Т.е. есть есть форма для ввода данных в таблицу, которая состоит из трёх выпадающих списков (данные берутся с листа "Справочник") и одного текстового поля - данные вносятся вручную. После нажатия на кнопку "Внести данные" все переносится в таблицу на листе "Данные". Первое в чем нужна помощь - при нажатии кнопки "Добавить строку" добавлялись аналогичные поля (3 комбобокса и один текстбокс) чуть ниже. Второе - после заполнения значений во вновь добавленных строках формы также бы добавлялись в таблицу. Файл прикладываю. Заранее спасибо за помощь!
[p.s.] Сразу оговорюсь. Задача стоит таким образом, чтобы поля добавлялись по мере их необходимости, т.к. форма для ввода данных используется для заполнения вручную с бумажных носителей, т.о. число полей не постоянно и каждый раз меняетсяBorn_IN_USSR
Никто не хочет помочь? ((( Порылся я на просторах интернета и на англоязычном сайте наткнулся на [vba]
Код
Set Control = object.Add( ProgID [, Name [, Visible]])
[/vba] При помощи него сейчас добавляется ComboBox. (Выпадающий список 1) Первый вопрос - как добавить сразу несколько полей - еще 2 (два) ComboBox (Выпадающий список 2 и 3) и один TextBox (Значение). Второй вопрос - как сделать, чтобы при нажатии кнопки "Добавить строки". все последующие строки автоматом смещались ниже? Ну и третий вопрос
Цитата
после заполнения вновь добавленных строк значения из них также добавлялись в таблицу
Никто не хочет помочь? ((( Порылся я на просторах интернета и на англоязычном сайте наткнулся на [vba]
Код
Set Control = object.Add( ProgID [, Name [, Visible]])
[/vba] При помощи него сейчас добавляется ComboBox. (Выпадающий список 1) Первый вопрос - как добавить сразу несколько полей - еще 2 (два) ComboBox (Выпадающий список 2 и 3) и один TextBox (Значение). Второй вопрос - как сделать, чтобы при нажатии кнопки "Добавить строки". все последующие строки автоматом смещались ниже? Ну и третий вопрос
Цитата
после заполнения вновь добавленных строк значения из них также добавлялись в таблицу
Можно завести на форме столько контролов, сколько может понадобиться по максимуму, но временно ненужные скрыть (Visible=False), и по мере необходимости открывать. Или можно по кнопке увеличивать высоту формы, чтобы с каждым разом отображалась еще одна строка контролов. Имхо так проще.
Можно завести на форме столько контролов, сколько может понадобиться по максимуму, но временно ненужные скрыть (Visible=False), и по мере необходимости открывать. Или можно по кнопке увеличивать высоту формы, чтобы с каждым разом отображалась еще одна строка контролов. Имхо так проще.nilem
Добрый день. Мне кажется, что Вы себе усложняете задачу. Если вводите построчно, то зачем каждый раз прорисовывать контролы? Я бы предложил оставить одну строку контролов и сделать 2 кнопки "добавить данные и закрыть форму", "добавить данные и остаться в форме". При нажатии на вторую переносим данные и очищаем значения в форме, позволяя пользователю вносить следующую строку
Добрый день. Мне кажется, что Вы себе усложняете задачу. Если вводите построчно, то зачем каждый раз прорисовывать контролы? Я бы предложил оставить одну строку контролов и сделать 2 кнопки "добавить данные и закрыть форму", "добавить данные и остаться в форме". При нажатии на вторую переносим данные и очищаем значения в форме, позволяя пользователю вносить следующую строкуsboy
Born_IN_USSR, добавить программно комбобоксы - это не самое сложное. Но придётся ведь добавлять к каждой такой строке и свою кнопку Добавить в таблицу и потом с танцами с бубном обрабатывать её нажатие. Или как-то по-другому планируете действовать?
Born_IN_USSR, добавить программно комбобоксы - это не самое сложное. Но придётся ведь добавлять к каждой такой строке и свою кнопку Добавить в таблицу и потом с танцами с бубном обрабатывать её нажатие. Или как-то по-другому планируете действовать?Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Понимаю, что будет не легко. Но хочу попробовать. Пока только получилось получить вторую строчку. Соответсвенно, хочется написать код чтобы автоматом добавлялись. Я так понимаю надо указать переменную которая будет определять местоположение следующей строки. Но не могу сообразить как ( Или я вообще не в том направлении думаю?
Понимаю, что будет не легко. Но хочу попробовать. Пока только получилось получить вторую строчку. Соответсвенно, хочется написать код чтобы автоматом добавлялись. Я так понимаю надо указать переменную которая будет определять местоположение следующей строки. Но не могу сообразить как ( Или я вообще не в том направлении думаю?Born_IN_USSR
Продолжаю биться с неравной силой ))) Итак, хотелось бы описать какой у меня алгоритм по переносу данных из формы. 1. Определить кол-во элементов управления которые были созданы при нажатии "Добавить строку" 2. Присвоение порядкового номера (индекса) каждому элементу управления. 3. Перенос данных из ЭУ в соответсвующие ячейки таблицы.
Соответсвенно вопросы: 1. Как подсчитать кол-во ЭУ ? 2. Как присвоить индекс каждому элементу 3. По третьему пункту. Есть код, который переносит данные из первого выпадающего списка в таблицу
Можно ли его и дальше использовать для переноса данных из вновь созданных ЭУ ?
Продолжаю биться с неравной силой ))) Итак, хотелось бы описать какой у меня алгоритм по переносу данных из формы. 1. Определить кол-во элементов управления которые были созданы при нажатии "Добавить строку" 2. Присвоение порядкового номера (индекса) каждому элементу управления. 3. Перенос данных из ЭУ в соответсвующие ячейки таблицы.
Соответсвенно вопросы: 1. Как подсчитать кол-во ЭУ ? 2. Как присвоить индекс каждому элементу 3. По третьему пункту. Есть код, который переносит данные из первого выпадающего списка в таблицу
Можно ли его и дальше использовать для переноса данных из вновь созданных ЭУ ?
так обращаться к созданным ЭУ, не получиться, т.к. вы не можете сразу в коде прописать имя элемента управления, которого нет(List2,List3 и т.д.)...K-SerJC
вот так можете получить список имен ЭУ, в порядке индексов от 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]
вот так можете получить список имен ЭУ, в порядке индексов от 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]
Т.е. у меня еще должно, к примеру, появиться индексы 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