Страницы: 1
RSS
EXCEL 2013,2010. При выполнении макроса - "не отвечает"
 
При выполнении макроса в EXCEL2013,2010 появляется надпись Excel (Не отвечает), хотя макрос выполняется. На Esc не реагирует.
После выполнения макроса становиться всё нормально. В 2007 и 2003 такого нет.
Специально купил 2013 лицензионную, а тут такой косяк.
 
При чем здесь косяк Excel, если сами напрограммировали такой макрос? Уверен, в коде используется цикл, который и "подвешивает" Excel, делая его неотзывчивым на внешние команды(т.к. он занят выполнением кода). И вполне логично, что при этом ОС ставит ему статут "Не отвечает", т.к. это действительно так.

По сути это не является каким-то косяком Excel или ОС. Код выполняется, Excel при этом занят. Делать в нем все равно ничего нельзя. Значит и трогать его смысла нет. Поэтому не понятны причины Ваших волнений. После выполнения кода ведь все нормально становится.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Вы  просто отписались, похоже темой не владеете...
 
Цитата
похоже темой не владеете
Вы проверили догадки, посмотрели код?
 
Цитата
AVRTGC пишет: похоже темой не владеете
Вам виднее, Вы-то я смотрю вообще в теме конкретно. Только зачем тогда вопросы задавать, если ответы неинтересны?
Вы не поняли, что Вам написали и поэтому решили, что написано ни о чем. Это нормально. Всегда так было - все, что человек не понимает он считает либо ересью, либо магией...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
1) Без просмотра кода действительно сложно что-то сказать.
2) На личном опыте заметил тормоза в 2013 по сравнению с предыдущими версиями.
3) Если используете цикл то стоит ли там DoEvents ?
 
Я сообщил о конкретной проблеме, эта программа может работать по несколько дней в 2007 версии (генерация и обработка множества случайных событий) и не разу такого не было.  Вчера 20.12.14 купил 2013 версию и возникли эти проблемы. На работе 2010 и такая же хрень.
Могу заснять "косяк" на телефон и выслать.
 
Do events ?
 
Код
For c = 1 To cd
   Do
       For a = 1 To 12
      ......
      Next a
   Loop Until ......
Next c
Дело не в цикле
 
Цитата
andreyvr пишет: Дело не в цикле
Уверены? Я еще в первом сообщении не видя кода указал на причину именно в циклах и том, как они были написаны. Как раз такие циклы подвешивают программу, делая её неотзывчивой на запросы. Это было всегда. Вы прежде чем делать выводы кто чем владеет и тем более их высказывать сами начните владеть темой.
Если в каждый Ваш цикл перед Next и Loop вставить DoEvents - то программа будет иметь возможность ответить на запрос, в том числе нажатия Esc. Совершенно иной вопрос - а надо ли? Т.к. это несколько замедлит работу кода.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Сейчас попробую.
 
DoEvents работает, но реагирует на нажатие кнопок мыши т. е. начинает печатать там где отметилась мышь.
Такая работа не устраивает.
попробую снять на телефон.
 
Чего Вы хотите снять? Проблема и так ясна и единственное, как можно помочь - DoEvents. А главный вопрос я уже задал: чем это мешает вообще? Все равно не рекомендуется работать с Excel, пока там выполняется некая обработка данных. Если Вы хотите понимать, что код именно работает, а не висит - сделайте прогресс-бар, который будет отображать прогресс выполнения операций в циклах. И все. Примеры можно найти через поиск, их было много.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Работа макроса в 2003 версии https://yadi.sk/i/Tv6p8yqHdX7xx
Работа макроса в 2013 версии https://yadi.sk/i/xg87ufj4dX85C

Видно, что при работе программы в 2003 версии она не зависает, её работу можно остановить и т.д.
файл сделан для примера работы в разных версиях.
 
Отвечаю на вопрос. Когда работает макрос я не работаю с таблицами, но и остановить работу макроса я не могу, а это иногда требуется для сохранения данных.
Ну и в конце концов 2013 должна работать не хуже 2003.
 
Тогда пишите напрямую в Microsoft. Мы здесь больше ничем не поможем. Все что можно было уже посоветовали.

P.S. Оба ролика показывают работу в 2013 Excel.  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо!
1 файл из роликов был сохранён в 2013 версии.
 
1. Возможно, книга была сохранена после Application.EnableCancelKey = xlDisabled
Тогда добавьте в начале кода Application.EnableCancelKey = xlInterrupt
Если поможет, то сохраните книгу, так как это свойство сохраняется вместе с книгой, аналогично Application.Calculation

2. Попробуйте использовать Application.EnableCancelKey = xlErrorHandler
Вот немного дополненный мною пример использования этого из справки:
Код
Sub Test()
  
  Dim v, x
  
  On Error GoTo handleCancel
  Application.EnableCancelKey = xlErrorHandler
  
  MsgBox "This may take a long time: press ESC or CTRL-BREAK to cancel"
  For x = 1 To 1000000    ' Do something 1,000,000 times (long!)
    ' do something here
    v = Cells(x).Value
  Next

handleCancel:
  If Err = 18 Then
    If MsgBox("Continue?", vbQuestion + vbYesNo) = vbYes Then Resume
  ElseIf Err Then
    MsgBox Err.Description, vbCritical, "Error #" & Err.Number
  Else
    MsgBox "Ok"
  End If

End Sub 
Чтобы исключить состояние "не отвечает", можно в цикле изредка выполнять DoEvents, например так:
If (x Mod 1000) = 0 Then DoEvents

3. В качестве более надежной альтернативы останова можно зажать Alt+Esc до тех пор, пока код не приостановится.
Кому-то еще помогает Ctrl+Shift+Break
Изменено: ZVI - 22.12.2014 04:52:44
 
Владимир (ZVI), спасибо за развернутый ответ
Каждый раз из ваших сообщений узнаю что-нибудь новенькое)
 
Цитата
Игорь пишет:...
Добрый день, Игорь!
Да, артефактов еще достаточно, есть с чем поиграться )) , да и новые появляются - нюансы с обновлением ActiveX, например.
Лишь бы что-то помогло из предложенного...
Изменено: ZVI - 22.12.2014 11:36:39
Страницы: 1
Наверх