Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2020, 16:01   #1
zw2auP&#j29!
Пользователь
 
Регистрация: 30.04.2020
Сообщений: 19
По умолчанию Самопроизвольное заполнение словаря

Добрый день.
Я очень извиняюсь. Но кто-нибудь сможет мне объяснить откуда в созданном мной словаре появляется запись с ключом, который я туда не вставлял?

В модуле Main объявлен глобальный словарь dictL1 и процедура Initialize для его заполнения, которая вызывается обработчиком событий при открытии книги. Так вот, если установить точку остановки в начале функции SecurityBuilder в модуле Security. А затем на листе "result" в ячейке B3 выбрать из списка "(нет)", то оказывается, что в словаре dictL1 появился ключ "(нет)"
Я конечно легко мог где-то накосячить. Но поиск в текущем проекте подозрительных dictL1.Add и "(нет)" не выявил. Не сочтите за труд, посмотрите файл xlsm.7z.
zw2auP&#j29! вне форума Ответить с цитированием
Старый 27.08.2020, 16:37   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Такого не наблюдаю.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 27.08.2020, 17:05   #3
zw2auP&#j29!
Пользователь
 
Регистрация: 30.04.2020
Сообщений: 19
По умолчанию

Hugo121,
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Такого не наблюдаю.
Странно. Но , дальше больше. Затер все формулы таблице "distination" на листе "result". Оставил только "=SecurityBuilder()" в ячейке "A5" и "=GetPriceUsd()" в "B5". И выяснил, что ключ появляется при проходе по строке
Код:
If dictL1.Exists(srcSheet) And HasPrice(rowCurrent) And dictL1(srcSheet)("colPriceUsd")("required") Then
функции "GetPriceUsd" из модуля "Other".

Переписал как
Код:
    If dictL1.Exists(srcSheet) Then
        If HasPrice(rowCurrent) Then
            If dictL1(srcSheet)("colPriceUsd")("required") Then
И проблема исчезла.

Но! Теперь почему-то обе функции стали выполняться многократно, хотя вызываются каждая всего один раз из ячеек "A5" и "B5". И на третьем проходе "GetPriceUsd" останавливается с ошибкой "Application.Caller.row object required" на строке
Код:
rowCurrent = Application.Caller.row - Application.Caller.Parent.Range("distination").row + 1
Почему происходит зацикливание?
zw2auP&#j29! вне форума Ответить с цитированием
Старый 27.08.2020, 17:28   #4
zw2auP&#j29!
Пользователь
 
Регистрация: 30.04.2020
Сообщений: 19
По умолчанию

Заменил все ячейки столбца "B" в таблице формулой "GetPriceUsd". И наблюдение за "rowCurrent" показало, что строки вычисляются непоследовательно. И почему-то происходит выход за диапазон. Перенес вычисление "rowCurrent" внутрь
Код:
If dictL1.Exists(srcSheet) Then
Все работает как нужно, но ни в одном вопросе понимания не появилось.
zw2auP&#j29! вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самопроизвольное изменение формата на финансовый во всей книге, как решить? Ppaa Microsoft Office Excel 4 21.01.2014 00:50
Создание словаря Михаил Наимов PHP 2 02.05.2012 09:17
Самопроизвольное выключение crecker Компьютерное железо 4 01.08.2011 00:39
Самопроизвольное выключение компа Simply-Art Компьютерное железо 5 27.01.2010 18:01
Самопроизвольное выключение(?) компа. Rio309 Компьютерное железо 18 01.12.2009 23:28