1

Тема: Форма перестает отображать процесс изменений в документе

В диалоговой форме задается выполнение последовательности процедур для активного документа.

При нажатии пользователем кнопки ОК последовательно вызывается каждая заданная процедура,
в цикле (например):
- удаляющая закладку
- вычисляющая текущий процент удаления
- устанавливающая капщен лейбла на форме: "Процент удаления закладок: [Значение]%"
- вызывающая репейнт формы
Потом следующая процедура и т.д. Каждая процедура отображает происходящий процесс.

Изменения динамично отображаются на форме. Но секунд через 10 она прекращает обновляться. Какое то время - секунд 10 просто висит (в заголовке отображается Not Responding), потом процесс заканчивается и форма удаляется.
10 первых секунд макрос удаляет и создает закладки в документе и форма обновляется.
Остальное время, когда форма не обновляется, макрос вставляет тексты в документ.
На время работы макроса, обновление окна Ворда запрещено. Когда я запрет убрал - на зависании формы это не отразилось. Процессор мощный, памяти много. Ворд 2007. Виндовс 7. Заголовков с Not Responding я до этого не встречал.

Кто знает, почему она прекращает обновляться. Как это побороть?
И еще, я понимаю, что макросы по определению медленнее, чем exe.
Можно ли скомпилировать макрос в exe? Что для этого нужно?
Будет ли он после этого продолжать находиться в шаблоне документа?

Отредактировано rizalut (17.01.2010 16:01:12)

2

Re: Форма перестает отображать процесс изменений в документе

Нашел ответ на 1 вопрос, в теле цикла нужно вызывать DoEvents

Остальные вопросы очень интересуют.

3

Re: Форма перестает отображать процесс изменений в документе

Нет, в EXE скомпилировать нельзя, можно сделать DLL. У объекта VBProject есть свойство BuildFileName и MakeCompiledFile
В шаблоне он находиться не будет, т.к. это будет уже отдельный файл. Да и быстродействия не будет. Это нужно только для того, чтобы другие могли использовать ваши функции.
По отношению к VBA слово "быстродействие" не совсем уместно. Макросы нужны для выполнения рутинных ручных действий, с чем они замечательно справляются. Если обработка макросами занимает 2-3 часа, то это всё равно быстрее ручной работы.

Лучше день потерять — потом за пять минут долететь!