Страницы: 1
RSS
Почему при добавлении в словарь ячейки, последующая проверка на ее наличие возвращает ЛОЖЬ?
 
Ребят, помогите советом...
Со словарями работаю уже давно и впервые столкнулся с такой проблемой. Метод Exists возвращает FALSE постоянно.
Специально проверял ключи - в наличии.
Запрашиваю b.keys(0) - получаю ключ (допустим А1), тут же его проверяю b.exists("A1") = false
Что за бред, не пойму никак, всю голову уже слома, который час уже только сегодня сижу  :cry:
Ошибок вроде нет
Это таблица ключей (item = строка)
dbhdbh
dskkdm
sdfls;kdfkl2
xskndkfkdmk
sdmkvfdmk
вот код макроса
Код
Sub TEST()
    Dim b As Object
    Dim x&
        Set b = CreateObject("Scripting.Dictionary")
        For x = 1 To 10: b.Add Cells(x, 1), x: Next
        For x = 1 To 10: Debug.Print b.Exists(Cells(x, 1)): Next
End Sub
Почему именно словарь? Потому что только словарь обладает функцией проверки на наличие ключа, а мне именно это и нужно
Таблица представлена для примера
Файл прикладываю если надо
 
а так:
Код
Sub TEST()
  Dim b As Object
  Dim x&
  Set b = CreateObject("Scripting.Dictionary")
  For x = 1 To 10: If Cells(x, 1) <> "" Then b.Add Cells(x, 1).Value, x
  Next
  For x = 1 To b.Count: Debug.Print b.Exists(Cells(x, 1).Value): Next
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Черт, вопрос снят
Пустяковая ошибка, только сейчас увидел
Value пропустил
иначе в словарь попадает ячейка
модераторы, можете удалить тему
 
Цитата
Ігор Гончаренко написал:
b = CreateObject("Scripting.Dictionary")
и в чем разница? те же яйца, только в профиль)
 
Цитата
Andrew написал:
модераторы, можете удалить тему
Форум только для Вас? А если зайдёт человек с аналогичной проблемой?
 
Сорри, не подумал.
Ошибка глупая... Заработался я видать...
 
думаю на эти грабли наступали многие ленивые программисты (я наступал), кто обращается к Cells(r,c).Value просто Cells(r,c) Логично! зачем писать еще .Value, если получаем тот же результат? оказывается в случае со словарем - результат не тот же!

Название темы:
почему при добавлении в словать ячейки, последующая проверка на ее наличие возвращает ЛОЖЬ?

ответ:
добавляйте в словарь не ячейку Cells(r,c), а явно ее значение Cells(r,c).Value и проверять нужно тоже наличие Cells(r,c).Value
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, всё правильно. Cells - это Range, содержащий всё множество информации о ячейке, включая ее значение (а так же размер, расположение, форматирование и все все все ее параметры). По умолчанию отдает значение, например если присваиваешь его стринговой или лонговой переменной, то получишь значение ячейки. Всё что касается наборов (коллекции, массивы, словари и прочая вкуснятина) они хранят то что отправишь (отправишь объект - объект, стринг - стринг итп), что просто замечательно.
В данном случае дело не в лени, а в том что я просто заработался уже, писав целый день код на 620 строк... Бывает)
Изменено: Andrew - 10.06.2018 19:23:00
Страницы: 1
Наверх