Страницы: 1
RSS
Обработка Worksheet_Change зависает, Обработка Worksheet_Change зависает
 
Здравствуйте, была задача избавиться от адресов ячеек путём поиска относительно других ячеек.

Рабочий код:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        Call Test1
    End If
    If Target.Address = "$A$2" Or Target.Address = "$A$3" Then
        Call Test2
    End If
End Sub

Изменённый код работает, пока не начну пользоваться ползунком. Тогда зависает
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Cells(Cells.Find("Поиск_1").Row, 22) Then
        Call Test1
    End If
    If Target.Address = Cells(Cells.Find("Поиск_2").Row, 22).Address Or Target.Address = "$A$3" Then
        Call Test2
    End If
End Sub

Отключения / включения событий не помогли
Код
Application.EnableEvents = False / Application.EnableEvents = True
Application.ScreenUpdating = False / Application.ScreenUpdating = True

Подскажите, пожалуйста, как исправить.
Изменено: Юрий М - 16.08.2022 18:57:53
 
Мария Маркова, здравствуйте
Так пробовали?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Мария Маркова,  что можно понять из Вашего названия темы? Предложите новое, из которого будет понятна задача - модераторы поменяют.
Помощь скрыта.
 
Цитата
написал:
Мария Маркова,  что можно понять из Вашего названия темы? Предложите новое, из которого будет понятна  задача  - модераторы поменяют.
Помощь скрыта.
У вас стояло "название темы" и "описание темы". Я расписала. Там же непонятно, что всë это будет выглядеть как одна тема.


Тема: Обработка Worksheet_Change зависает
 
Aprility,   а Вы какое отношение имеете к этой теме?
И не нужно меня цитировать.
 
Цитата
написал:
Aprility,   а  Вы  какое отношение имеете к этой теме?
это моя тема
 
Нет. Эту эта тема была создана пользователем Мария Маркова,
И запомните - кнопка цитирования не для ответа!
 
Не смущает дата регистрации?
Ник поставила. Я думала, раз есть возможность выбрать ник, то будет отображаться ник, а не ФИО.  
 
Пожалуйста, не меняйте ник по ходу обсуждения, чтобы не вносить путаницу.
Название поменял, Ранее скрытая помощь оьображается.
 
Да, и Application.ScreenUpdating тоже пробовала. Итог, к сожалению, один.  
 
Может еще и тайна содержания Test1 и Test2 будет приоткрыта?
Изменено: БМВ - 16.08.2022 19:46:59
По вопросам из тем форума, личку не читаю.
 
2 модуля процедур.
Повторюсь, они прекрасно работают (первый код).
Если необходимо, то завтра, как буду у компьютера, скину.  
 
тогда дебажьте, что там у вас выходить  Cells(Cells.Find("Поиск_1").Row, 22) ибо
Target.Address = Cells(Cells.Find("Поиск_1").Row, 22) странное сравнений, с одной стороны тест указывающий на диапазон, а с другой значение из ячейки найденной или ненайденной.
Может и тема то не про зависание, а про то что вы что-то не то сравниваете.
По вопросам из тем форума, личку не читаю.
 

Для Test1 в ячейке идёт выпадающий список, зависание ползунка происходит после выбора из списка.

Код
Sub Test1()
    Application.ScreenUpdating = False
    Dim Period As Range
    Set Period = Range("V18")
If Period = "Текст1" Then
    Rows.Hidden = False
    Worksheets("Лист1").ResetAllPageBreaks
    Worksheets("Лист1").Rows(45).PageBreak =xlPageBreakManual
End If

If Period = "Текст 2" Then
    Rows.Hidden = False
    Worksheets("Лист1").ResetAllPageBreaks
    Rows("33").EntireRow.Hidden = True
    Worksheets("Лист1").Rows(45).PageBreak = xlPageBreakManual
End If
    Application.ScreenUpdating = True
End Sub

Код
   Sub Test2()
    Dim sht As Worksheet
    Set sht = Worksheets(1)
    sht.PageSetup.CenterFooter = "Текст " & Range("A1") & vbLf & "Текст " & Range("$V$14") & ". Страница &P из &N"
End Sub

Попробовала поэкспериментировать и выяснила, что зависание происходит при формате "Разметка страницы", при других форматах ничего не зависает.

Почему так может происходить?

 
Вооо, теперь дебаг нужен на каком месте происходит завис. Накидайте debug.print и смотрите что будет выводит и когда. При разметке страницы там же пересчет страниц срабтывает возможно приложение нужно нужно отдать на это время пересчитать. Типа DoEvents.
По вопросам из тем форума, личку не читаю.
 
Всё хорошо, debug.print срабатывает на каждой строке.
Ещё поэкспериментировала и выяснила. Зависание происходит, если после выпадающего списка я больше никуда не нажимаю, а сразу прокручиваю ползунок.
Если выбрать другую ячейку (вручную или кодом), то зависания не происходит.
 
Думаю полезнее будет нарисовать Вам пример, в котором можно добиться того же негативного результата, и выложит его сюда.
По вопросам из тем форума, личку не читаю.
 
Если активировать на Листе 1
Код
    'Text1.Select
или выбрать другую ячейку после выбора значения из списка, зависания не будет.
 
Возможно поможет, наблюдал у себя на win7 excel 2016 зависание всех открытых книг после отмены фильтрации (выглядкло так. Фильтрация отменяется, ни в какую ячейку не войти, активное окно не прикручивается, при попытке закрытия на крестик пробивается окно сохранить и все сохраняется, после повторного открытия все изменения сохраняются, ошибок не выдает). Причем раньше такого не было, а тут откуда-то вылезло... смог победить только отключением анимации в Свойства системы - быстродействие.
 
Отключение анимации в Быстродействии никак не повлияло.
 
А вот мне зависание описанное не воспроизвести.
По вопросам из тем форума, личку не читаю.
 
Интересно, вечером попробую на другом компьютере.  
 
На другом компьютере также происходит зависание после использования ползунка.  
 
У меня эта ситуация воспроизводится (Excel 2016 Windows 10).
Владимир
 
Приложил усилия и завесил, но вот теперь однозначно понятно, что никакого отношения к теме проблема не имеет. Указанное событие не отрабатывается при скроллинге. Скорее всего это такой баг приложения.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх