Добрый день, всем участникам форума! Решил одну свою задачку (выполнение ряда макросов при пересчете значения формулы) готовым кодом в конкретный лист: [vba]
Код
Private Sub Worksheet_Calculate() 'Updateby Extendoffice Dim Xrg As Range Set Xrg = Range("A8") If Not Intersect(Xrg, Range("A8")) Is Nothing Then Call Show Call Hide End If End Sub
[/vba] При добавлении этого кода после каждого действия файл на несколько секунд-минут зависает в пересчете формул. В начале было много ячеек с формулой СЛУЧМЕЖДУ. Думал проблема в этом. Снес. Все равно пересчитывает. Других летучих формул нет. Пробовал отключать в начале автоматически пересчет формул Application.Calculation = ... и включать в конце кода - увы пересчитывает. Причем даже на любом листе если просто добавлю любое число в любое место - пересчитывает моргая экраном. Убираю код. Все нормально работает. Но остается не решенная задача с запуском других макросов при изменении результата расчеты формулы. Файл нужен будет? (большой, много зачищать нужно будет, если нужно будет подготовлю). P.S. пытался в модуль код добавить и прописал ссылку на конкретный лист перед RANGE - не работает вообще. Буду признателен за совет как подправить код.
Добрый день, всем участникам форума! Решил одну свою задачку (выполнение ряда макросов при пересчете значения формулы) готовым кодом в конкретный лист: [vba]
Код
Private Sub Worksheet_Calculate() 'Updateby Extendoffice Dim Xrg As Range Set Xrg = Range("A8") If Not Intersect(Xrg, Range("A8")) Is Nothing Then Call Show Call Hide End If End Sub
[/vba] При добавлении этого кода после каждого действия файл на несколько секунд-минут зависает в пересчете формул. В начале было много ячеек с формулой СЛУЧМЕЖДУ. Думал проблема в этом. Снес. Все равно пересчитывает. Других летучих формул нет. Пробовал отключать в начале автоматически пересчет формул Application.Calculation = ... и включать в конце кода - увы пересчитывает. Причем даже на любом листе если просто добавлю любое число в любое место - пересчитывает моргая экраном. Убираю код. Все нормально работает. Но остается не решенная задача с запуском других макросов при изменении результата расчеты формулы. Файл нужен будет? (большой, много зачищать нужно будет, если нужно будет подготовлю). P.S. пытался в модуль код добавить и прописал ссылку на конкретный лист перед RANGE - не работает вообще. Буду признателен за совет как подправить код.Anis625
Сообщение отредактировал Anis625 - Среда, 26.05.2021, 08:27
Решение нашел на дружественном (надеюсь) сайте: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If oldValue <> Cells(8, 1) Then Application.EnableEvents = False Application.ScreenUpdating = False Call Show Call Hide Application.EnableEvents = True Application.ScreenUpdating = True End If End Sub
[/vba] Странно что его сразу не высмотрел, хотя в поиске он находил этот сайт
Решение нашел на дружественном (надеюсь) сайте: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If oldValue <> Cells(8, 1) Then Application.EnableEvents = False Application.ScreenUpdating = False Call Show Call Hide Application.EnableEvents = True Application.ScreenUpdating = True End If End Sub
[/vba] Странно что его сразу не высмотрел, хотя в поиске он находил этот сайтAnis625
Сообщение отредактировал Anis625 - Среда, 26.05.2021, 11:36
Только маленький нюанс у этого кода - когда включаю его в лист при любом действии он похоже включается (хотя значение ячейки не меняется) и задержка после каждого изменения в любом месте книги на 1-1,5с (заметно визуально). Вроде отключают обновление экрана. Подскажите, пожалуйста, нужно для этого отдельную тему создать с вопросом?
Только маленький нюанс у этого кода - когда включаю его в лист при любом действии он похоже включается (хотя значение ячейки не меняется) и задержка после каждого изменения в любом месте книги на 1-1,5с (заметно визуально). Вроде отключают обновление экрана. Подскажите, пожалуйста, нужно для этого отдельную тему создать с вопросом?Anis625
Serge_007, К этому же вопросу относится, т.к. код до конца не отрабатывает как необходимо
Попробовал сделать так: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If oldValue = Cells(8, 1) Then End Sub Else Application.EnableEvents = False Application.ScreenUpdating = False Call Show Call Hide Application.EnableEvents = True Application.ScreenUpdating = True End If End Sub
[/vba] Выдает ошибку =(
Serge_007, К этому же вопросу относится, т.к. код до конца не отрабатывает как необходимо
Попробовал сделать так: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If oldValue = Cells(8, 1) Then End Sub Else Application.EnableEvents = False Application.ScreenUpdating = False Call Show Call Hide Application.EnableEvents = True Application.ScreenUpdating = True End If End Sub
Serge_007, При добавлении кода макрос (из сообщения 4) включается (т.е. запускаются макросы Hide и Show) при действии в любом месте книги (даже просто если число какое нибудь написать). Решил подправить код, предположил что при условии [vba]
Код
oldValue = Cells(8, 1)
[/vba]вообще ничего происходить не будет. Не получается подправить.
Serge_007, При добавлении кода макрос (из сообщения 4) включается (т.е. запускаются макросы Hide и Show) при действии в любом месте книги (даже просто если число какое нибудь написать). Решил подправить код, предположил что при условии [vba]
Код
oldValue = Cells(8, 1)
[/vba]вообще ничего происходить не будет. Не получается подправить.Anis625
Я думал, что если указал ячейку A8 то макрос только ее смотрит. Нужно чтобы при изменении (результата расчета формулы, любое изменение) ячейки А8 срабатывали два макроса Hide и Show. А если не меняется значение, то ничего не происходило.
Я думал, что если указал ячейку A8 то макрос только ее смотрит. Нужно чтобы при изменении (результата расчета формулы, любое изменение) ячейки А8 срабатывали два макроса Hide и Show. А если не меняется значение, то ничего не происходило.Anis625
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A:A")) Is Nothing Then If oldValue <> Cells(8, 1) Then Application.EnableEvents = False Application.ScreenUpdating = False Call Show Call Hide Application.EnableEvents = True Application.ScreenUpdating = True End If End If End Sub
[/vba]
Финальный код (вдруг кому пригодится): [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A:A")) Is Nothing Then If oldValue <> Cells(8, 1) Then Application.EnableEvents = False Application.ScreenUpdating = False Call Show Call Hide Application.EnableEvents = True Application.ScreenUpdating = True End If End If End Sub