Здравствуйте, была задача избавиться от адресов ячеек путём поиска относительно других ячеек.
Рабочий код:
Код
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
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
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
Application.EnableEvents = True
End Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
написал: Мария Маркова, что можно понять из Вашего названия темы? Предложите новое, из которого будет понятна задача - модераторы поменяют. Помощь скрыта.
У вас стояло "название темы" и "описание темы". Я расписала. Там же непонятно, что всë это будет выглядеть как одна тема.
тогда дебажьте, что там у вас выходить 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 срабатывает на каждой строке. Ещё поэкспериментировала и выяснила. Зависание происходит, если после выпадающего списка я больше никуда не нажимаю, а сразу прокручиваю ползунок. Если выбрать другую ячейку (вручную или кодом), то зависания не происходит.
Возможно поможет, наблюдал у себя на win7 excel 2016 зависание всех открытых книг после отмены фильтрации (выглядкло так. Фильтрация отменяется, ни в какую ячейку не войти, активное окно не прикручивается, при попытке закрытия на крестик пробивается окно сохранить и все сохраняется, после повторного открытия все изменения сохраняются, ошибок не выдает). Причем раньше такого не было, а тут откуда-то вылезло... смог победить только отключением анимации в Свойства системы - быстродействие.
Приложил усилия и завесил, но вот теперь однозначно понятно, что никакого отношения к теме проблема не имеет. Указанное событие не отрабатывается при скроллинге. Скорее всего это такой баг приложения.