Страницы: 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

это, если ячейка не пустая. Так, что вы проверяете?
Страницы: 1
Читают тему (гостей: 1)
Наверх