2013-11-01 2 views
3

В случае листа SelectionChange я установил:Application.Interactive = True не удается

Application.Interactive = False 
.... do work 
Application.Interactive = True 

По какой-то причине Interactive не получает набор обратно к истине, даже если я знаю, что код выполняется.

Excel 2013

Любые идеи?

+0

Ah wait up ... Я нахожу, что проблема заключается только в том случае, когда включен Autofilter. (такое же поведение в 2010 году) –

+0

Подходим ближе - у меня есть функция, помеченная как «Application.Volatile», если я прокомментирую эту строку - она ​​работает нормально. Эта функция используется в ячейках заголовка столбца для отображения активного уравнения автоматического фильтра. –

+0

Red herring - см. Ответные комментарии –

ответ

2
Sub Main() 

    Debug.Print Application.Interactive 
    Application.Interactive = False 
    Debug.Print Application.Interactive 
    Application.Interactive = True 
    Debug.Print Application.Interactive 

End Sub 

Не обязательно для меня ... Попробуйте это и see more here

Поскольку вы обнаружили причину провалив вывод может быть то, что Application.Volatile должен быть установлен в ложь на функции, использует его, потому что режим Interactive блокирует пользовательский интерфейс, а Volatile вычисляет все, основываясь на пользовательском вводе. Пока вход пользователя заблокирован, вы не можете ожидать функции, которая оценивает ввод пользователя для работы. Один исключает другого - надеемся, что это имеет смысл.

Кроме того, проверьте свои операторы on error resume next или on error goto <label>, так как это может привести к пропуску некоторых из кода, поэтому Application.Interactive = True никогда не будет выполнен.

+1

Спасибо за ответ - но см. Комментарии выше. Что-то связанное с Application.Volatile –

+0

Это оказалась красная селедка. Я обнаружил, что у меня была процедура, устанавливающая ON ERROR RESUME NEXT, и после серьезной ошибки код перешагнул операторы в вызывающей процедуре (Application.Interactive = True), не сообщив о дальнейших ошибках. Другими словами Application.Interactive = True выбрасывает ошибку из-за предыдущей ошибки, но я не видел сообщение об ошибке, и оказалось, что инструкция не работает. –

+0

@brigzy great Я рад, что вы решили проблему. Не обновляйте ответ, чтобы –

Смежные вопросы