Страницы: 1
RSS
Работа со словарем "Scripting.Dictionary"
 
Доброго всем времени суток.
Столкнулся с такой проблемой.
С помощью словаря создаю уникальные списки комбобоксов.
При выборе в Combobox1 - значение Сетевые
- далее
проверяю листиндекс во всех последующих.
Для проверки вывожу msgbox c листиндексом в событии combobox_change до обновления словарей (FillControls me) и после.
В combobox8 - при событии change происходит смена листиндекса на -1 после обновления, а при этом значение отображается правильное. Такого быть не должно!
Кто-нибудь может посмотреть файл и сказать в чем проблема? Я уже и не знаю....
Иногда только промахнувшись, понимаешь как ты попал.
 
Цитата
!  \Downloads\Сети (1).rar: Неподдерживаемый формат архива. Установите более новую версию WinRAR.
! \Downloads\Сети (1).rar: Архив повреждён или имеет неизвестный формат
------------
перепакуйте файл, RAR не открывает
 
Удалил все лишнее из файла.
Задача упростилась.
Почему на комбобоксе8 при выборе значения листиндекс сбрасывается на - 1, такого же не должно быть, а значение выбирается правильно, причем оно соответствует листиндексу 1?
Иногда только промахнувшись, понимаешь как ты попал.
 
так вы там в конце вызываете fillcontrols и присваиваете комбо новый список, а до этого все нормально
Живи и дай жить..
 
Именно так.
На всех комбо отрабатывает правильно. Последний глючит.
Почему?
Мне потом будут нужны листиндексы.
Иногда только промахнувшись, понимаешь как ты попал.
 
Листиндекс не должен сбрасываться на -1, если в нем есть значение.
Если выбрать в комбобокс8 "Выбрать все", то листиндекс = 0 - это верно, а при другом выборе пишет (-1), но отображает список верно.
Иногда только промахнувшись, понимаешь как ты попал.
 
а зачем каждый раз все заполнять?

я уж не говорю зачем в цикле на каждом шагу пытаться добавитьв словарь одно и то же значение(выбрать все) ?
Живи и дай жить..
 
Я учусь только это делать. Выбрать все - я уберу из цикла. Понял, что ошибся.
Обновляю все, т.к. это часть кода.
Будут удаления из базы, добавления, изменения и я хочу в фильтрах видеть реальную ситуацию для выбора условий.
Весь код не умещается в 100 кб, пришлось почти все зарезать...
Иногда только промахнувшись, понимаешь как ты попал.
 
Выбрать все - убрал из цикла.
В остальном - листиндекс так же сбивается в комбобокс8 на -1
Иногда только промахнувшись, понимаешь как ты попал.
 
Dict.Add Str(arrData(i, 5)), i&
разные типы данных получались, привел к текстовым
Живи и дай жить..
 
вообще предложил бы переписать так:
Код
Public Sub FillControls(ByVal UForm As UserForm)
    Dim i As Long, j&
    'Сеть
    On Error Resume Next
    For j = 2 To 5
        Set Dict = CreateObject("Scripting.Dictionary")
        With Dict
              .Add "Выбрать все", 0&
                For i = LBound(arrData, 1) + 1 To UBound(arrData, 1)
                    .Add CStr(arrData(i, j)), i&    ' + 1
                Next i
                UForm.Controls("Combobox" & (j + 3)).List = Dict.keys
        End With
        Set Dict = Nothing
    Next j
End Sub
Живи и дай жить..
 
Спасибо, Слэн.
Я потестирую позже, сейчас не могу.
Потом напишу.
Еще раз спасибо.
Иногда только промахнувшись, понимаешь как ты попал.
 
Слэн, спасибо за помощь.
Теперь все верно работает. Возьму на вооружение.
Иногда только промахнувшись, понимаешь как ты попал.
Страницы: 1
Наверх