|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.09.2011, 22:22 | #1 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
Серьёзная ошибка ListBox в Excel
Убил несколько дней на локализацию серьёзной ошибки в Excel.
Предположим что есть лист в котором по двойному клику (это принципиально) по ячейке вызывается пользовательская экранная форма UF1. На форме расположен ListBox LT c .ListStyle = fmStyleOption .MultiSelect = fmMultiSelectMulti При двойном клике в LT формируется список и форма показывается. Так вот. Если кликать в области листа ПОД местом где на экране появится листбокс, то с высокой вероятностью в списке появятся отмеченные (выбранные) элементы. Если кликать по листу вне зоны где появится LT - никаких элементов выбрано не будет. При этом в LT лишний клик в обработчике событий не фиксируется. Хотя одна из выбранных лишних строк соответствует ординате курсора мыши на листе Excel. Более того. Если поставить перед UF1.show точку останова (или msgbox, или что то вроде Application.wait(now + TimeValue("00:00:02")) , то всё работает правильно - лишние элементы не отмечаются. Пробовал под Excel 2003 и 2010 в Vista SP2 и Win 7 Pro SP1. Эффект полностью воспроизводим на разных компьютерах с разными системами и офисами. Так как из-за глюков форума не могу прицепить пример в этом посте - добавлю его в следующем сообщении. Последний раз редактировалось Aent; 04.09.2011 в 22:29. |
04.09.2011, 22:26 | #2 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
Пример файла моделирующего ситуацию
|
04.09.2011, 22:33 | #3 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Нда...
У меня не "высокая вероятность" - у меня пока 100% вероятность...
webmoney: E265281470651 Z422237915069 R418926282008
|
04.09.2011, 23:35 | #4 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
А у меня еще и первый элемент выбирается (Excel 2000, WinXP SP2).
Придумал, как ждать не более 1 секунды:
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
04.09.2011, 23:56 | #5 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
Отмечается не первый элемент а в зависимости от того где был .ListIndex перед .show
Добавьте перед .Show UF1.LT.ListIndex =UF1.LT.ListCount - 1 и отмечаться будет последний . Ждать секунду заказчик не хочет. На вариант с запуском макроса скажем по правому клику - то же не идёт. Пока проблема решилась эмпирически. Установкой перед .show цикла Код:
Число оборотов цикла подбирал экспериментально. Последний раз редактировалось Aent; 05.09.2011 в 00:28. |
05.09.2011, 00:48 | #6 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
> Ждать секунду заказчик не хочет.
Ишь, какой торопливый Тогда такой "костыль". Если между запуском формы и изменением листбокса проходит менее 0,1 с, то это глюк, а не пользователь, и надо очистить весь список:
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
05.09.2011, 03:42 | #7 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
Казанский, хорошая идея - спасибо
У меня ситуация несколько сложнее - список отметок не сбрасывается а загружается перед показом. Но, полагаю - должно получиться и в этом варианте. |
05.09.2011, 08:09 | #8 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Я бы сделал задержку таким способом:
Код:
Код:
|
05.09.2011, 11:48 | #9 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
Спасибо, Игорь.
|
05.09.2011, 11:51 | #10 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
Без подбора временнЫх интервалов.
При нормальной работе событие MouseDown или KeyDown происходит перед событием Change. Если Change произошло без нажатия мыши или клавиши - это глюк. Если значения будут меняться программно, перед изменением надо установить флаг MouseKeyDown = True.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Последний раз редактировалось Казанский; 05.09.2011 в 11:53. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Открытие Excel из списка файлов ListBox | anton555sleptsov | Помощь студентам | 2 | 16.11.2010 22:48 |
как добавить в listbox файлы(пишу с помощью bassplayer)(Listbox+opendialog=play) | blackstersl | Общие вопросы Delphi | 11 | 09.06.2010 13:23 |
Запись на лист Excel одной и той же опции ListBox два раза подряд | Mishel825 | Microsoft Office Excel | 7 | 01.11.2009 14:08 |
Не получается поиск в файлах Excel через Listbox..ПОМОГИТЕ | Al_Sha | Помощь студентам | 0 | 03.07.2009 22:42 |