|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
||||||
Почему при Do - Loop приложение зависает26.11.2012, 17:08. Показов 3926. Ответов 22
Метки нет (Все метки)
Добрый день. Нашел у J. Walkenbach листинг, которым хотел воспользоваться, но при выполнении (в части Do....Loop), комп зависает. Пожалуйста, подскажите причину.
0
|
||||||
| 26.11.2012, 17:08 | |
|
Ответы с готовыми решениями:
22
Почему зависает программа при бесконечном цикле Do - Loop Почему зависает приложение? Зависает при выходе приложение |
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|
| 26.11.2012, 18:23 | |
|
У меня тоже не работает (использую Excel 2007). Верней при работе находятся ячейки листа, включая пустые, за пределами заполненного массива без учета форматирования. Так и неразобрался пока, как это исправить. А ещё меня немного огорчает, что даже пример из книги Уокенбаха не имеет полного объявления переменных (i, j).
P.S. Чтобы понять причину подвисания пробуйте отладку программы в пошаговом режиме выполнения, запуск с точками останова, консоль Immediate и окно Locals.
0
|
|
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
| 26.11.2012, 18:39 [ТС] | |
|
to mc-black. Извиняюсь, но при переносе листинга взял только часть от sub .... до...End sub., a Dim i%, j as Integer было выше, под Option Explicit. А так - пробовал я и Stop, и F8, и... И ничего.
0
|
|
|
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
|
||||||
| 26.11.2012, 18:55 | ||||||
|
немного поправил:
0
|
||||||
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
| 26.11.2012, 19:05 [ТС] | |
|
To Romas654. Спасибо, конечно, но значение "floor" можно найти гораздо легче и проще. Тут идея в том, что листинг, как я это понимаю, должен выделить все ячейки листа с определенным форматированием (в даном случае - Font.Italic = True ....), как не смежные диапазоны, для возможности групповой обработки.
0
|
|
|
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
|
||||||
| 26.11.2012, 19:39 | ||||||
|
А, это про поиск форматов... не разглядел сперва
Тогда строку 42 в исходном коде заменить на:
1
|
||||||
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|||||||||||
| 26.11.2012, 20:12 [ТС] | |||||||||||
|
To Romas654. еще раз спасибо. Но в моем первом посте указано, что это - творчество J. Walkenbach "Профессиональное программирование на VBA в Excel 2003". И у меня оно не работает. ПОЧЕМУУУУ??? Разобраться хочу. Там есть пару выражений, которые я не понимаю до конца. А конкретно - вот это:
to Romas654. Так, на быструю руку накидал, все работает, но вопрос остался: "Почему сачкует Уокенбах?"
0
|
|||||||||||
|
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
|
|
| 26.11.2012, 20:23 | |
|
Не работает потому что в 5 строке (в коде из последнего сообщения) findnext в упор не хочет понимать заданные ранее параметры поиска, т.е. поиск именно форматирования, вместо этого ф-ция тупо ищет ячейки с пустым значениям игнорируя заданные ранее параметры. Возможно, это работало правильно в прежних версиях офиса, но в моей 2010 нет. как видимо и в вашей.
Как я понял, что происходит в коде: AllCells это все найденные, FoundCell найденная в текущий момент. присваивается обеим этим диапазонам значение ранее найденного первого элемента (он уже подходит по параметрам поиска). далее, в цикле, в диапазон с помощью поиска помещается следующая найденная ячейка, причем найденная после последней подходящей After:=FoundCell. С помощью Union к имеющимся диапазонам добавляется найденный. Цикл заканчивается, когда поиск возвращается к первой найденной (проверяется по адресу, т.е. B2). Диапазоны выделяются для наглядности и выводится их кол-во... Вот такая сказка американского программиста на русский лад
1
|
|
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
||
| 26.11.2012, 20:29 | ||
|
Igor_Tr, Ну по поводу Дж.Уокенбаха - он ведь книгу для Excel 2002 писал, в нем вы этот код наверняка не проверяли, не исключено что там оно бы сработало. А потом, пример построен на небольшой модификации примера метода .FindNext из справочной системы Excel - там поиск ведется конечно без форматирования, но в общем-то следовало ожидать работоспособности кода от Excel. Кто ж знает, может пример нормально не потестировал. Еще один момент - работоспособности кода Уокенбаха следовало бы ожидать, на мой взгяд MS здесь метод .FindNext реализовали не до конца (и поэтому нелогично).
0
|
||
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
| 26.11.2012, 20:31 [ТС] | |
|
Больше всего у меня было вопросов к этому - Set FoundCell = FirstCell. Со всем, что Вы написали, я согласен. Действительно, бегает по пустым ячейкам
0
|
|
|
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
|
||
| 26.11.2012, 20:34 | ||
|
0
|
||
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|
| 26.11.2012, 20:41 | |
|
Может обратиться в тех. поддержку Microsoft, чтобы в Office 2012 это поправили ближайшим патчем?
Добавлено через 5 минут Только что проверил в 2003 - баг один-в-один повторяется. Есть смысл проверить только в 2002. Тогда, если что, привет Дж.Уокенбаху)))
0
|
|
|
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
|
|
| 26.11.2012, 20:41 | |
|
Ага... А они такие в ответ:
Мы, конечно, примем вашу жалобу, только сперва назовите вашу фамилию, адрес и номер лицензии вашего продукта
0
|
|
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
| 26.11.2012, 20:47 [ТС] | |
|
Кому-то смешно, а мне - грусно. Просто подсказать выход именно в листинге J. Walkenbach? to Romas654: поменял в посте 1 Set FoundCell = FirstCell на Set FoundCell = Cells.Find(What:="", After:=ActiveCell, SearchFormat:=True). Мертвому - припарки, к сожалению.
0
|
|
|
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
|
|
| 26.11.2012, 20:50 | |
|
Не понял, не работает что ли?
0
|
|
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
| 26.11.2012, 20:52 [ТС] | |
|
Нет. Виснет, зараза. Конкретизирую. В моем посте #1 изменил строку 40.
0
|
|
|
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
|
|
| 26.11.2012, 20:54 | |
|
Странно. Вот пример. Попробуйте.
Какая версия офиса?
1
|
|
|
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
|
|
| 26.11.2012, 21:04 [ТС] | |
|
2003. На ноутбуке.
Добавлено через 6 минут Заработало!!!!! После строки 32 в посте #1 нужно было добавить (по Вашему, т.е. Romas654) предложению - FirstCell.Activate. Спасибо!!!!
0
|
|
|
117 / 31 / 2
Регистрация: 16.11.2012
Сообщений: 65
|
||||||
| 26.11.2012, 21:08 | ||||||
|
А, точно. это я не исправил после экспериментов.
Вот так работает и без выделения ячеек.
0
|
||||||
|
2786 / 718 / 106
Регистрация: 04.02.2011
Сообщений: 1,443
|
|||
| 26.11.2012, 21:10 | |||
|
0
|
|||
| 26.11.2012, 21:10 | |
|
Помогаю со студенческими работами здесь
20
Зависает приложение при отладке Зависает приложение при копировании Зависает приложение при обращении к IdHTTP1.Get Зависает приложение при нажатии на кнопку При обращении к процедуре приложение зависает Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
|