Страницы: 1
RSS
Как правильно использовать словарь при добавлении нового элемента и сортировке
 
Приветствую всех.
Помогите правильно использовать словарь (коллекцию) для решения одной задачи (насколько я понимаю их использование в моем случае оптимальный вариант).
На листе есть диапазон из двух колонок. В одной колонке список значений (пусть это будет список листов в книге), в другой метка, обозначающая что элемент выбран (пусть будет звездочка).
Как сделать так, чтобы при добавлении макросом нового значения (оно будет "влезать" между имеющимися) соответствие между меткой и значением имеющихся данных не сбивалось?

На примере будет понятнее.

Словари (коллекции) недавно начал осваивать, поэтому у самого это сделать к сожалению не получилось.
Изменено: Александр Медведев - 04.11.2016 07:06:25
Если не можешь победить беспорядок, то надо возглавить его.
 
не стало понятнее на примере, потому что не понятно в чем, собственно, проблема?  
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Постараюсь объяснить.
У меня есть проект с большим количество листов, модулей и процедур. Он пока полностью не готов, но работать пользователям с ним уже можно. При передаче пользователю каждый раз определенное количество листов и модулей мне необходимо удалять, так как они временные. На отдельных листах макросом формируется их список в котором я выделяю (помечаю меткой слева от названия) те листы (модули, процедуры), которые подлежат удалению и по нажатию на одну кнопку разом делаю это.
Проблема в том, что список этих объектов постоянно меняется, добавляются одни листы, удаляются или изменяются названия процедур и модулей. Проект ведь еще не готов полностью и много временных объектов. И в списке приходится заново проставлять метки для выделения удаляемых объектов, так как список изменился (сдвинулся, отсортировался), а метки остались на прежнем месте.
В примере я привел только список листов. Например, появляется новый "Лист2" и метки уже сбиваются  
Изменено: Александр Медведев - 04.11.2016 06:50:06
Если не можешь победить беспорядок, то надо возглавить его.
 
Зачем Вы сортируете листы при каждой интерации цикла? Зачем Вы так СЛОЖНО их сортируете? Используйте штатную сортировку и будет Вам счастье
Например
Код
Sub Создаем_список_листов()
    Range("B2:B5").ClearContents
    Dim Sheet As Worksheet, cell As Range
    
    For Each Sheet In ThisWorkbook.Worksheets
        Set cell = Worksheets("Лист1").Cells(Sheet.Index + 1, 2)
        cell.Formula = Sheet.Name
    Next
    Call SortSheets
End Sub
Sub SortSheets()
    Dim ShName: ShName = ActiveSheet.Name
    With ActiveSheet.Sort
        With .SortFields
            .Clear
            .Add key:=Range("B2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        End With
        .SetRange Range("A2:B" & Cells(Rows.Count, 2).End(xlUp).row)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
З.Ы. Не понял, при чем тут словарь?
Изменено: Sanja - 04.11.2016 10:41:43
Согласие есть продукт при полном непротивлении сторон
 
Интересный вариант с сортировкой, даже не думал в этом направлении.
Но, почему подумал про словарь. Когда страницы не добавляются, а удаляются, то в первой колонке остается метка удаленного листа.
Думал, что удаляя из словаря ключ, можно как-то удалить за собой и элемент ему соответствующий или наоборот.
Возможно ли это при сортировке, пока не знаю. Удалить сортировкой конечно же нет, после нее имеется ввиду.
При повторной сортировке также соответствие слетает.
Изменено: MedvedevAV - 04.11.2016 11:54:37
Если не можешь победить беспорядок, возглавь его
 
Почему Вы все время говорите про словарь? В Ваших процедурах на них нет и намека
Цитата
Александр Медведев написал: насколько я понимаю их использование в моем случае оптимальный вариант
Александр Медведев написал: При передаче пользователю каждый раз определенное количество листов и модулей мне необходимо удалять, так как они временные.
Зачем Вы вообще ТАК заморачиваетесь? Ну отдайте пользователям на растерзание то, что уже готово, а когда доделаете весь проект, вот тогда и поудаляете все временные листы/макросы/и проч. ОДИН раз
З.Ы. Про Словари
Согласие есть продукт при полном непротивлении сторон
 
В том числе потому что, нашлась задача, решение которой позволило бы мне наконец разобраться с этими способами работы. Всегда откладывал из-за за их относительной сложности и неимением конкретной задачи. С учетом того, что изучил чувствую, что скорее всего можно мой вопрос решим и таким образом. Но как, пока не соображу. Вариантов со словарями было несколько, но я их не стал выкладывать по причине недоделанности, в прямом и переносном смысле.
А итоговый вариант появится еще очень не скоро, так как делаю его в свободное от работы время.
Изменено: Александр Медведев - 04.11.2016 14:47:43
Если не можешь победить беспорядок, то надо возглавить его.
 
Цитата
Sanja написал: Зачем Вы так СЛОЖНО их сортируете?
:)
Код
Sub SortSheets()
  [A:B].Sort [B1], xlAscending, Header:=xlYes
End Sub
 
Так гораздо нагляднее. Здорово!
Забросил я идею решить задачу с помощью словаря, не получилось.
Пробую по простому, через VLOOKUP. Похоже все получится.
Изменено: Александр Медведев - 04.11.2016 23:38:08
Если не можешь победить беспорядок, то надо возглавить его.
Страницы: 1
Наверх