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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2009, 19:01   #1
Quatro_Drive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 18
Злость Зависает документ при срабатывании макроса

Здравствуйте!! Здесь описывал проблему, которую удалось решить, однако возникла следующая ситуация.. Пришлось применить этот же макрос к другому документу такого же типа.. НО!! Если в документах, для которых был написан этот макрос, все прекрасно работало, в других документах при редактировании ячеек, подвластных макросу, сам макрос срабатывает (наблюдаю визуально), но после этого сразу документ виснет секунд на 30. Подозревая что неладное может быть в самом документе, сегодня создал такой же, от начала и до конца, и в результате ситуация не изменилась(( Для наглядности по указанной ссылке можно посмотреть тот самый злополучный документ..
Друзья, кто чем может, выручайте пожалуйста)

Последний раз редактировалось Quatro_Drive; 21.09.2009 в 19:04.
Quatro_Drive вне форума Ответить с цитированием
Старый 21.09.2009, 19:30   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Quatro_Drive, документ по ссылке запаролен. Мы не владеем древним искусством телепатии...
Есть предположение, что в файле много формул, которые после каждого изменения, естесственно, начинают пересчитываться. Отсюда зависание.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 21.09.2009, 19:41   #3
Quatro_Drive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 18
По умолчанию

Прошу прощения за косяк, исправлюсь. В приложении документ без пароля. По поводу Вашего предположения могу сказать что формул по минимуму, все на сложении и умножении..
Вложения
Тип файла: rar С-заказ.rar (13.5 Кб, 17 просмотров)
Quatro_Drive вне форума Ответить с цитированием
Старый 21.09.2009, 19:56   #4
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Попробуйте так
Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
        If Not Intersect(Target, Range("Y21:AA35,T40:V45,AD50:AG53,Q60:S60")) Is Nothing Then
            Application.EnableEvents = False
            Target.NumberFormat = "#,##0.00$"
            Target = Application.WorksheetFunction.RoundUp(Target, 0)
            Application.EnableEvents = True
    End If
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 22.09.2009, 14:24   #5
Quatro_Drive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 18
Хорошо

Здорово, это помогло)
Я так понял, что код отличался наличием еще двух строк, которые рекомендовал попробовать SAS888 самыми первыми и последними

Application.EnableEvents = False
Application.EnableEvents = True

Пусть банально, но возникает вопрос, в чом скрывалась главная проблемаи как помогли ее решить эти две строки?
Спасибо за помощь!!
Quatro_Drive вне форума Ответить с цитированием
Старый 22.09.2009, 15:14   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
как помогли ее решить эти две строки?
Ваш макрос зацикливался.
1) При изменении ячейки запускается макрос Workbook_SheetChange
2) Этот макрос изменяет ячейку: Target = Application.WorksheetFunction.Round Up(Target, 0)
3) Это изменение запускает вторую копию макроса Workbook_SheetChange, который опять изменяет ту же ячейку, и т.д. до бесконечности.

Отключение обработки событий
Application.EnableEvents = False
Application.EnableEvents = True

позволяет избежать зацикливания.
EducatedFool вне форума Ответить с цитированием
Старый 22.09.2009, 23:21   #7
Quatro_Drive
Пользователь
 
Регистрация: 22.07.2009
Сообщений: 18
По умолчанию

Спасибо всем откликнувшимся!!
Quatro_Drive вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнение макроса при нажатии на Лист KinderX Microsoft Office Excel 7 01.07.2009 17:19
При создании нескольких экземпляров класса приложение зависает Mixasik Общие вопросы C/C++ 1 25.04.2009 13:25
VB6. Программа зависает при выполнении. Artinka Помощь студентам 2 03.04.2008 00:06
При выполнении макроса, дергается таблица valerij Microsoft Office Excel 3 23.03.2008 00:38