Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
mor_sergey
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 680
1

Комбобокс и коллекции. Или коллекции комбобоксов

09.07.2018, 16:46. Просмотров 1122. Ответов 10
Метки нет (Все метки)

Ребят, изобразил пример, посмотрите пожалуйста
...там при двойном щелчке на, допустим "Профессия 2" , вылезает окно с заполненным комбобоксом содержимым активной ячейки
....Не знаю как сделать, чтобы при смене профессии спинбутоном, обновлялись и другие столбцы.


Т.е. при условии отличия содержимого активной ячейки от комбобокса,строки(кол-во СИЗ с профессией активной ячейки) менялись на строки (СИЗы с профессией из комбобокса)...(запускалась процедура Автофилл)

процедура в кнопке "Обновить", галиматья полная, не знаю как быть. Устал думать, без вас не справлюсь...



Burk, Hugo121, Burk, особая благодарность
0
Вложения
Тип файла: zip Пример заказаX.zip (137.3 Кб, 6 просмотров)
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2018, 16:46
Ответы с готовыми решениями:

Получение новой коллекции путем фильтрации элементов коллекции находящихся в другой коллекции
Всем привет, нуждаюсь в помощи знатоков) Имеется вот такая иерархия если представить в JSON: {...

Удаление элемента коллекции в коллекции коллекции )
Есть коллекция (к1), в ней элементы + коллекция (к2), Так вот в к2 тоже есть элементы, и из к2 надо...

Как удалить элемент из коллекции, во время перебора этой коллекции foreach?
Прив. Смотрите что. Есть сервер, на нем 2 класса - Server & ClientConnection. При подключении...

Сделать сортировку коллекции вместо создания новой коллекции с передачей IOrderedEnumerable<T>
Есть: SortableObservableCollection&lt;T&gt; using System; using System.Collections.Generic; using...

10
mor_sergey
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 680
09.07.2018, 16:54  [ТС] 2
удалялись строки старой профессии , активная ячейка обновлялась значением комбобокса и запускалась процедура Автофилл. Вот
0
Burk
1092 / 766 / 233
Регистрация: 11.07.2014
Сообщений: 2,714
10.07.2018, 10:32 3
mor_sergey, ну вы как всегда на высоте! В 10 строчках наляпать столько ошибок, талант.
I меняется от текущей строки до конца строк с информацией. А коллекция заносится только для непустых ячеек. Т.е. её длина максимально 3. После выхода из цикла i = 17. нужно для подсчёта длины коллекции использовать свойство Count. Цикл по b - это песня. От активной строки (число) до профессии (строка). Как в том анекдоте От забора до обеда. И если вылетает ошибка, то ставьте перед ней какой-нибудь вывод, чтобы посмотреть значения перед ошибкой.
Начал для примера кое-что исправлять, но постарайтесь сами.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub CommandButton2_Click()
Dim MainTable As New Collection
k = 0
With Sheets("База сотрудников")
 
        For i = ActiveCell.Row To .Cells(.Rows.Count, 1).End(xlUp).Row
            If .Cells(i, 9).Value <> "" Then
              MainTable.Add .Cells(i, 9).Value
              k = k + 1
            End If
        Next i
         MsgBox .Cells(Rows.Count, 1).End(xlUp).Row & "  " & i & " " &   MainTable.Count
            End With
         For b = ActiveCell.Row To MainTable(i + 1)
         Rows(MainTable(i + 1)).Delete
        Next b
        Call Auto_Fill
End Sub
1
mor_sergey
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 680
10.07.2018, 20:46  [ТС] 4
Burk, сейчас пример сделал как у меня в программке. если сделать даблклик на "Профессия 3" и в форме выбрать в комбобоксе "Профессия 1" ....... я не знаю как удаление строк правильно сделать в общем. Кол-во строк привязано к вещам конкретной профессии. И при смене профессии кол-во меняется ведь. и удаляется не верное кол-во строк. Ни так ни через коллекции не выходит. Мож паузу какую поставить..при смене комбобокса...как это делается
0
Вложения
Тип файла: zip Пример заказаX.zip (140.4 Кб, 4 просмотров)
mor_sergey
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 680
10.07.2018, 22:44  [ТС] 5
а если удалять с профессии ниже по списку (только строки с профессиями на листе в коллекции запихать), все равно не понятно...в общем прошу помощи господа

Добавлено через 1 час 43 минуты
Hugo121, посмотрите пожалуйста

Visual Basic
1
2
3
4
5
6
7
8
LastRow = (ActiveCell.Row + 1) + UserForm1.ListBox1.ListCount
If workersListRow.Range(9) = UserForm1.ComboBox1.Value Then
Exit Sub
 Else
For i = 1 To UserForm1.ListBox1.ListCount
Rows(LastRow - i).Delete
Next i
End If
0
Burk
1092 / 766 / 233
Регистрация: 11.07.2014
Сообщений: 2,714
11.07.2018, 11:20 6
mor_sergey, а если изменили профессию, то как быть с трусами (если они есть в обоих профессиях) донашивать старые или выдать новые?

Добавлено через 19 минут
и, если в новой профессии нет какого-то СИЗа из старой, что с ним делаем, сдаем?
1
mor_sergey
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 680
11.07.2018, 13:37  [ТС] 7
проблема в том, как удалить строки с вещами старой профессии. Когда происходит замена, листкаунт тоже меняется...Может есть какая задержка, чтобы UserForm1.ListBox1.ListCount была старой профессии. Вот и все что мне нужно

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

Добавлено через 10 минут
в Профессия 1 и Профессия 4 одинаковое кол-во СИЗ.если 1 заменить на 4, удалится 3 строки....Потому как в 4 тоже 3 СИЗа. вот такая арифмиетика

Добавлено через 2 часа 3 минуты
Burk, задачу решил.
сделал публичную переменную. назначил ей листкоунт, записал в процедуру активации формы(до изменения комбобокса)как я раньше не додумался...
ну и уикл сделал от 1 до той переменной.вот и все
0
mor_sergey
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 680
11.07.2018, 13:41  [ТС] 8
Вот....Если заменить на 1 профессию, все замечательно работает
0
Вложения
Тип файла: zip Пример заказаX.zip (148.8 Кб, 1 просмотров)
mor_sergey
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 680
11.07.2018, 15:15  [ТС] 9
Burk, но вот тут опять непонятно) мое решение работает когда просмотр таблицы с листа, а если юзер смотрит спинбутеном через форму? и захочет сменить профессию оттуда. тут вариант с активацией не сработает
0
Burk
1092 / 766 / 233
Регистрация: 11.07.2014
Сообщений: 2,714
11.07.2018, 15:31 10
Лучший ответ Сообщение было отмечено mor_sergey как решение

Решение

mor_sergey, я так понимаю, что ваша форма загружается, когда вы дважды кликаете на профессии, тогда запускайте следующий макрос в тех местах ваших макросов, где нужно вам чистить. Активная ячейка как раз будет ячейка с профессией. Это на удаление строк. Дальше ваши сообщения, думаю, что понятны только вам.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub DelRows()
Dim I As Integer
Application.ScreenUpdating = False
I = ActiveCell.Row + 1
Do While Cells(I, 10) <> ""
  ActiveSheet.Rows(I).Delete shift:=xlUp
Loop
'если нужно удалить и строку с профессией, то подключите следующую строку
'ActiveSheet.Rows(I - 1).Delete shift:=xlUp
Application.ScreenUpdating = True
End Sub
1
mor_sergey
77 / 11 / 0
Регистрация: 28.03.2018
Сообщений: 680
11.07.2018, 16:29  [ТС] 11
Burk, все работает. то, что нужно. Спасибо
0
11.07.2018, 16:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2018, 16:29

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Доступ из элемента коллекции к другим элементам коллекции
Подскажите как получить данные из другого элемента коллекции? В приведенном примере необходимо...

Анонимные коллекции в другие коллекции, как?
Здравствуйте. Говорю сразу, я не уверен что есть такой термин как анонимная коллекция. Наверно...

Удаление коллекции объектов из коллекции
Доброго дня. Подскажите каким образом можно удалить коллекцию объектов из коллекции с помощью linq?...

Заменить элементы одной коллекции на элементы другой коллекции
Всем привет, у меня такой вопрос: есть 2 коллекции: List&lt;Person&gt; list1 = new List&lt;Person&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.