Страницы: 1
RSS
Автоматический запуск макроса при изменении данных
 
Добрый день уважаемые форумчане!

Я честно пытался найти решение своей проблемы на форуме и в интернете, даже находил подобные вопросы, но сам так и не смог разобраться. Суть заключается в следующем: в файле имеется 3 листа Лист1 - Сводная таблица, Лист2 - Детали, Лист3 - Дефекты, при заполнении сводной таблицы из нее берутся данные для таблицы детали (Лист2), а из нее собираются данные для таблицы дефекты (Лист3), на этом листе прописан макрос который скрывает пустые строки в диапазоне ячеек таблицы. Задача заключается в том, чтобы макрос запускался сразу как только вносятся новые данные. Я пытался задать запуск макроса при изменении значения в диапазоне ячеек, но это не работает так как изменение происходит динамически через формулы, находил описание, что это надо делать как-то через Worksheet_Calculate, но у самого ничего не получилось. Очень надеюсь на вашу помощь, и прошу сильно не кидаться тапками, в макросах еще толком ничего не понимаю.
 
Аркадий Бочкарев, а что за макрос то?? что он должен делатЬ?
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Аркадий Бочкарев написал: пытался задать запуск макроса при изменении значения в диапазоне ячеек, но это не работает так как изменение происходит динамически через формулы
Формулы реагируют на изменение входных данных. Определите ячейку (или диапазон ячеек), которые влияют на пересчет формул, и производите "запуск макроса при изменении значения в диапазоне ячеек"
 
Mershik, Скрывает строки если ячейки пустые
Код
Sub Defect()
    Dim c As Range

    For Each c In Range("E3:E30")
            If Not IsEmpty(c) Then
            c.EntireRow.Hidden = (c.Value = "")
        End If
    Next   
End Sub
Изменено: vikttur - 17.09.2021 15:24:26
 
vikttur, Спасибо за идею! Я понял суть, но не знаю как реализовать. Для запуска макроса при изменении значения в ячейках у меня есть вот такой код:

Код
1 Private Sub Worksheet_Change(ByVal Target As Range)
2    If Not Intersect(Target, Me.Range("Диапазон ячеек")) Is Nothing Then
3        Application.EnableEvents = False
4        'MyMacros
5        Application.EnableEvents = True
6    End If
7  End Sub

и если я все правильно понимаю, данный код работает если макрос и диапазон ячеек находятся на одном листе, а у меня получается макрос для Листа3 а диапазон ячеек в которых надо отслеживать изменение значения на Листе1. Подскажите пожалуйста как его подправить чтобы диапазон ячеек просматривался с Листа1.

P.S. Прошу прощения не разобрался как правильно оформить код.

 
В процедуре Defect указывайте имя листа.
В процедуре Worksheet_Change замените MyMacros на Defect.
А можно и из самой процедуры Worksheet_Change скрывать строки другого листа,указывая его имя.
Изменено: Юрий М - 17.09.2021 19:07:25
 
Юрий М, Добрый вечер! В этом-то вся и проблема, что я не понимаю как это сделать? Вы можете написать как в процедуре Defect указать лист, как будет выглядеть строчка кода?
 
В Вашем файле нет такого диапазона - "Диапазон ячеек". Да и быть не может: пробелы в имени не допускаются
 
Аркадий Бочкарев, написал
Цитата
Скрывает строки если ячейки пустые
а в коде
Код
If Not IsEmpty(c) Then

это, если ячейка не пустая. Так, что вы проверяете?
 
Приветствую Всех!
Всё классно, но появилась новая вариация исходной задачи:
Есть стандартный код при изменении диапазона данных.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Range("J8:K30"), Range(Target.Address)) Is Nothing Then
      MsgBox "Значение ячейки " & Target.Address & " изменено."
    End If
End Sub
Но мне необходимо чтобы данный макрос срабатывал только при изменении пользователем.
Если же на листе изменения создаёт макрос, то данный код не должен запускаться.
Есть варианты доработки?
Спасибо !
Изменено: Konstanta - 26.01.2023 15:32:13 (Исправил опечатки)
 
Цитата
Konstanta: Если же на листе изменения создаёт макрос, то данный код не должен запускаться.
писать в начале всех макросов Application.EnableEvents = False, а в конце менять на True.
    Это отключает (а в конце включает обратно) возникновение всех событий, одним из которых является событие изменения листа Worksheet_Change
Изменено: Jack Famous - 26.01.2023 15:35:45
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Спасибо!
Решено!
Страницы: 1
Наверх