Доброго дня! Я новичок в Экселе. Пробую сделать инструмент для ведения базы данных объектов. Если не трудно, помогите, пожалуйста, разобраться как мне воплотить в жизнь задуманное. 1. Появилась мысль вывод данных по объекту сделать через UserForm. В выпадающем списке (диапазон объекты) выбирается объект и при нажатии "Вывести данные по объекту",соответственно, данные объекта выводятся в соответствующие ячейки UserForm, а после нажатия кнопки "Вывести данные в таблицу и закрыть", данные выводятся в таблицу и UserForm закрывается. 2. Ввод нового объекта тоже делается через UserForm, при этом: - При вводе нового объекта необходима проверка на совпадение наименования вводимого объкта с уже существующим с таким же названием объектом в БД; - Данные по новому объекту должны вставляться в первую попавшуюся пустую строку диапазона АВ7:АВ108, не зависимо от местоположения этой пустой строки (так как некоторые объекты со временем будут переноситься из БД в архив и будут возникать пустые строки) 3. Как организовать перенос данных объекта с листа "ОБЪЕКТЫ-ОСНОВНАЯ ТАБЛИЦА" на лист "ОБЪЕКТЫ-ОСНОВНАЯ Архив" через UserForm с последующим удалением с листа "ОБЪЕКТЫ-ОСНОВНАЯ ТАБЛИЦА" ? Причём на листе "ОБЪЕКТЫ-ОСНОВНАЯ Архив" данные по переносимому объекту должны вставляться в первую попавшуюся пустую строку диапазона D7 : D108, не зависимо от местоположения этой пустой строки (Тут тоже возникнет ситуация, когда некоторые объекты со временем будут удаляться и будут возникать пустые строки). 4. Как организовать удаление данных объекта с листа "ОБЪЕКТЫ-ОСНОВНАЯ Архив" через UserForm?
Мне главное - понять принцип, как это работает. Потом я уже сам попробую допинать.
Заранее спасибо!
Доброго дня! Я новичок в Экселе. Пробую сделать инструмент для ведения базы данных объектов. Если не трудно, помогите, пожалуйста, разобраться как мне воплотить в жизнь задуманное. 1. Появилась мысль вывод данных по объекту сделать через UserForm. В выпадающем списке (диапазон объекты) выбирается объект и при нажатии "Вывести данные по объекту",соответственно, данные объекта выводятся в соответствующие ячейки UserForm, а после нажатия кнопки "Вывести данные в таблицу и закрыть", данные выводятся в таблицу и UserForm закрывается. 2. Ввод нового объекта тоже делается через UserForm, при этом: - При вводе нового объекта необходима проверка на совпадение наименования вводимого объкта с уже существующим с таким же названием объектом в БД; - Данные по новому объекту должны вставляться в первую попавшуюся пустую строку диапазона АВ7:АВ108, не зависимо от местоположения этой пустой строки (так как некоторые объекты со временем будут переноситься из БД в архив и будут возникать пустые строки) 3. Как организовать перенос данных объекта с листа "ОБЪЕКТЫ-ОСНОВНАЯ ТАБЛИЦА" на лист "ОБЪЕКТЫ-ОСНОВНАЯ Архив" через UserForm с последующим удалением с листа "ОБЪЕКТЫ-ОСНОВНАЯ ТАБЛИЦА" ? Причём на листе "ОБЪЕКТЫ-ОСНОВНАЯ Архив" данные по переносимому объекту должны вставляться в первую попавшуюся пустую строку диапазона D7 : D108, не зависимо от местоположения этой пустой строки (Тут тоже возникнет ситуация, когда некоторые объекты со временем будут удаляться и будут возникать пустые строки). 4. Как организовать удаление данных объекта с листа "ОБЪЕКТЫ-ОСНОВНАЯ Архив" через UserForm?
Мне главное - понять принцип, как это работает. Потом я уже сам попробую допинать.
Нельзя в одной теме задавать несколько не связанных одной темой вопросов. Вы уже содавали тему на другом ресурсе. И опять одно и тоже. Куча вопросов.
Нельзя в одной теме задавать несколько не связанных одной темой вопросов. Вы уже содавали тему на другом ресурсе. И опять одно и тоже. Куча вопросов. parovoznik
parovoznik, Скидал примерно так, как я вижу. Сильно не пинайте. И у меня возникает сразу следующая проблема при переходе на динамический список В оригинальном файле, слева от основной таблицы, у меня организована таблица, которая с помощью формул выводит принадлежность объекта к закреплённому к нему ответственному лицу. А ниже (таблица расчитана на ведение до 100 объектов) идёт сбор статистики с помощью формул, что позволяет на главной странице просматривать в табличном виде ответственное лицо и все закреплённые за ним объекты. В динамичном списке (с удалением строк), соответственно, удаляеются и формулы.
Суть заключается в том, чтобы вывести статистику по Ответственным за объекты. В поле "Ответственный" указываем некие данные (фамилию ответственного) и надо, чтобы вываливался список закреплённых за ним объектов. Далее при нажатии на объект был переход в другой UserForm Может что опять не так рассказал - позадавайте вопросы, я постараюсь Вам ответить. Спасибо.
parovoznik, Скидал примерно так, как я вижу. Сильно не пинайте. И у меня возникает сразу следующая проблема при переходе на динамический список В оригинальном файле, слева от основной таблицы, у меня организована таблица, которая с помощью формул выводит принадлежность объекта к закреплённому к нему ответственному лицу. А ниже (таблица расчитана на ведение до 100 объектов) идёт сбор статистики с помощью формул, что позволяет на главной странице просматривать в табличном виде ответственное лицо и все закреплённые за ним объекты. В динамичном списке (с удалением строк), соответственно, удаляеются и формулы.
Суть заключается в том, чтобы вывести статистику по Ответственным за объекты. В поле "Ответственный" указываем некие данные (фамилию ответственного) и надо, чтобы вываливался список закреплённых за ним объектов. Далее при нажатии на объект был переход в другой UserForm Может что опять не так рассказал - позадавайте вопросы, я постараюсь Вам ответить. Спасибо.ILIA-PLC
ILIA-PLC, я в сообщении 4 привел Вам пример. Где отбираются уникальные значения и вываливался список закреплённых за ним объектов. Просто нужно переделать под свои нужды.
ILIA-PLC, я в сообщении 4 привел Вам пример. Где отбираются уникальные значения и вываливался список закреплённых за ним объектов. Просто нужно переделать под свои нужды.parovoznik
Сообщение отредактировал parovoznik - Пятница, 03.04.2020, 09:50
parovoznik, Добрый день! Не понимаю как это сделать. От слова совсем
With Sheets("БД") ComboBox1.List = .Range("a2", .Cells(Rows.Count, "a").End(xlUp)).Value Мы выводим в ComboBox данные со столбца А листа "БД", начиная с ячейки А2, но, по сути, выбирая значения в ComboBox, мы указываем номер строки, с которой считываются значения для TextBox. А по задумке, выбирая значение с диапазона листа "БД" макрос должен проверить все строки в столбце D листа "Лист2" на соответствие выбранному значению и в TextBox вывести данные столца А тех строк, в которых имеется выбранное нами значение. Если переложить на мой файл, то выбирая в ComboBox значение "РП-3" должно: В TextBox1 выйти значение ОБ-1 В TextBox2 выйти значение ОБ-2 В TextBox3 выйти значение ОБ-5 В TextBox4 выйти значение ОБ-8 В TextBox5 выйти значение ОБ-13 Итак далее, пока выбранное значение "РП-3" в столбце D "Лист2" не закончится
parovoznik, Добрый день! Не понимаю как это сделать. От слова совсем
With Sheets("БД") ComboBox1.List = .Range("a2", .Cells(Rows.Count, "a").End(xlUp)).Value Мы выводим в ComboBox данные со столбца А листа "БД", начиная с ячейки А2, но, по сути, выбирая значения в ComboBox, мы указываем номер строки, с которой считываются значения для TextBox. А по задумке, выбирая значение с диапазона листа "БД" макрос должен проверить все строки в столбце D листа "Лист2" на соответствие выбранному значению и в TextBox вывести данные столца А тех строк, в которых имеется выбранное нами значение. Если переложить на мой файл, то выбирая в ComboBox значение "РП-3" должно: В TextBox1 выйти значение ОБ-1 В TextBox2 выйти значение ОБ-2 В TextBox3 выйти значение ОБ-5 В TextBox4 выйти значение ОБ-8 В TextBox5 выйти значение ОБ-13 Итак далее, пока выбранное значение "РП-3" в столбце D "Лист2" не закончится ILIA-PLC
ILIA-PLC, привет попробуйте так (код для модуля формы)
[vba]
Код
Option Explicit Dim x
Private Sub UserForm_Initialize() 'Задаём диапазон значений для Комбобокса Dim i&
With Sheets("Лист2") If .FilterMode Then .ShowAllData x = .Range("A1:G" & .Cells(Rows.Count, 1).End(xlUp).Row).Value End With
'With CreateObject("Scripting.Dictionary") 'как вариант ' .CompareMode = 1 ' For i = 2 To UBound(x) ' If Not .Exists(x(i, 4)) Then .Item(x(i, 4)) = Empty 'Значение из БД ' Next i ' Me.ComboBox1.List = .keys 'End With
With CreateObject("System.Collections.ArrayList") For i = 2 To UBound(x) If Not .Contains(x(i, 4)) Then .Add x(i, 4) Next i .Sort Me.ComboBox1.List = .toArray End With End Sub
Private Sub ComboBox1_Change() If Me.ComboBox1.ListIndex = -1 Then Exit Sub Dim s$, i&, k& s = Me.ComboBox1.Value Call ClearTextBox
On Error Resume Next: Err.Clear For i = 2 To UBound(x) If x(i, 4) = s Then k = k + 1 Me("TextBox" & k).Text = x(i, 1) If Err Then MsgBox "Not found TextBox " & k, 48 End If Next i On Error GoTo 0 End Sub
Private Sub ClearTextBox() Dim i& For i = 1 To 6 Me("TextBox" & i).Text = vbNullString Next i End Sub
[/vba]
ILIA-PLC, привет попробуйте так (код для модуля формы)
[vba]
Код
Option Explicit Dim x
Private Sub UserForm_Initialize() 'Задаём диапазон значений для Комбобокса Dim i&
With Sheets("Лист2") If .FilterMode Then .ShowAllData x = .Range("A1:G" & .Cells(Rows.Count, 1).End(xlUp).Row).Value End With
'With CreateObject("Scripting.Dictionary") 'как вариант ' .CompareMode = 1 ' For i = 2 To UBound(x) ' If Not .Exists(x(i, 4)) Then .Item(x(i, 4)) = Empty 'Значение из БД ' Next i ' Me.ComboBox1.List = .keys 'End With
With CreateObject("System.Collections.ArrayList") For i = 2 To UBound(x) If Not .Contains(x(i, 4)) Then .Add x(i, 4) Next i .Sort Me.ComboBox1.List = .toArray End With End Sub
Private Sub ComboBox1_Change() If Me.ComboBox1.ListIndex = -1 Then Exit Sub Dim s$, i&, k& s = Me.ComboBox1.Value Call ClearTextBox
On Error Resume Next: Err.Clear For i = 2 To UBound(x) If x(i, 4) = s Then k = k + 1 Me("TextBox" & k).Text = x(i, 1) If Err Then MsgBox "Not found TextBox " & k, 48 End If Next i On Error GoTo 0 End Sub
Private Sub ClearTextBox() Dim i& For i = 1 To 6 Me("TextBox" & i).Text = vbNullString Next i End Sub
nilem, Спасибо, вставил - заработало Сейчас только осталось понять - как это всё работает. Посижу - поразбираюсь, надеюсь, что получится. Единственное, сразу есть вопрос. Я так понимаю, что код берёт "Значение из БД" с листа "Лист2". Как можно сделать так, чтобы код брал "Значение из БД" с листа "БД"?
nilem, Спасибо, вставил - заработало Сейчас только осталось понять - как это всё работает. Посижу - поразбираюсь, надеюсь, что получится. Единственное, сразу есть вопрос. Я так понимаю, что код берёт "Значение из БД" с листа "Лист2". Как можно сделать так, чтобы код брал "Значение из БД" с листа "БД"?ILIA-PLC