Доброго всем времени суток. Пробую сделать автоматический запуск макроса при внесении данных в ячейки. Нашел в интернете следующий вариант адаптировал под себя.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range: Set rng = [z3:z700] '
Dim rng2 As Range: Set rng2 = [w3:x700] '
Dim rng3 As Range: Set rng3 = [z3:ab700] '
Dim rng4 As Range: Set rng4 = [y3:y700,ad3:ad700] '
Dim rng5 As Range: Set rng5 = [y3:y700,aa3:aa700] '
If Not Intersect(rng, Target) Is Nothing Then
spusk
ElseIf Not Intersect(rng2, Target) Is Nothing Then
spusk2
ElseIf Not Intersect(rng3, Target) Is Nothing Then
mp
ElseIf Not Intersect(rng4, Target) Is Nothing Then
tp
ElseIf Not Intersect(rng5, Target) Is Nothing Then
tc
End If
End Sub
Но при этом у меня не происходит расчет. Точнее он происходит но постоянно вываливаются ошибки. Подозреваю что ошибки связаны с тем что макрос отслеживает изменения в любой из ячеек диаппозона контроля, а мне нужно что бы макрос рассчета запускался после появления данных во всех ячейках строки диаппозона. Не совсем представляю как сделать пример. Но надеюсь, что смог обьяснить. Не подскажете как изменить макрос для решения проблемы рассчета?
теперь хоть буду знать: если макрос совершенно не работает - это называется макрос, "адаптированный под себя" alex_j, не нужны: - ссылки на смежные темы - описание Вашего решения
нужно: описание задачи, которая перед Вами стоит. если описание будет лаконичным и полным, тогда есть шанс получить точный ответ
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Ігор Гончаренко Хорошо. Исходные данные: есть некоторый набор формул рассчитывающих значения для ячеек использующих данные из других ячеек. Нужно: чтобы расчет производился автоматически, как только формула получает все исходные данные. Т.е. ячейки из которых она берет данные для расчета заполнены. В примере все расчеты повешены на 1 кнопку и идут последовательностью расчетов с заполнением ячеек. Переменной a постоянно присваивается значение заполняемой в данный момент ячейки.
Люди!!!! Помогите!!! Каждый раз запускать пересчет значений не удобно. и отнимает кучу времени. Тогда как в принципе макрос мог бы отрабатывать на ячейку по мере того как получает информацию для ее обсчета. Я пока не могу найти решения в интернете но подозреваю что с подобной задачей сталкиваюсь не первый.
Jungl, то что Вы предлагаете, как я понимаю, всего лишь скроет события. а тут задача совсем не такая. Есть ячейки значения в которых рассчитываются формулами/макросами, не суть важно. Но если мы делаем формулы, то файл резко начинает набирать вес. Потому реализовано макросами. Соответственно для расчета беруться значения из той же строки в которой будет ячейка с результатом. Задача отслеживать изменения построчно в ячейках относящихся к расчетам. И как только все ячейки для расчета заполнены автоматически запускать макрос который заполнит расчетную ячейку. Может в макросе который отслеживает изменения на листе можно как то указать, что контролируем изменения построчно. Хотя RAN, утверждает что макрос смотрит все ячейки листа и просто реагирует в случае изменения конкретных. Но если макрос рассматривает все ячейки как некий массив с которым сравнивает текущее состояние, то почему он не может рассматривать ячейки контроля построчно?
alex_j написал: Соответственно для расчета беруться значения из той же строки в которой будет ячейка с результатом. Задача отслеживать изменения построчно в ячейках относящихся к расчетам.
Давайте разберемся: 1. Вам нужно ОТСЛЕЖИВАТЬ изменения в листе и в определенном случае запускать расчет. В таком случае вам нужна процедура листа worksheet_change. 2. Вам нужно отслеживать изменения в СТРОКЕ, а значит вам нужно использовать свойство Target в процедуре change листа. 3. Из всего этого следует, что вам необходимо включить проверки ячеек столбцов в изменяемой СТРОКЕ, преждем чем запускать код расчета, пример:
Код
If Target.Count = 1 Then
If Target.Column > 1 And Target.Column < 6 Then
r = Target.Row
If Cells(r, 2) <> "" And Cells(r, 3) <> "" And Cells(r, 4) <> "" And Cells(r, 5) <> "" Then
Application.EnableEvents = False
Cells(r, 6) = Cells(r, 2) + Cells(r, 3) + Cells(r, 4) + Cells(r, 5)
Application.EnableEvents = True
End If
End If
End If
Есть ячейки значения в которых рассчитываются формулами/макросами, не суть важно
для Вас не важно, а с точки зрения функционирования Excel - это 2 принципиально отличающихся механизма выполнения расчетов как только кто-то поймет что нужно Вам, и у него еще останется интерес заглядывать в тему, в которой автор не может обьяснить, что ему нужно, тогда возможно...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!