При пересчете листа - простой макрос-счетчик добавляет числа в две ячейки (F9 и I11). Рядом стоит формула Случмежду. При срабатывании пересчета - начинается бесконечная цепная реакция.
Вопрос - как создать "слепую зону" в виде диапазона E7:J13 - в котором событие Workbook_SheetCalculate не действует ? То есть во всей книге действует, а в определенном диапазоне определенного листа - не действует. Это означает - что числа вписываются макросом в этот диапазон, но не вызывают дополнительного пересчета листа.
Причем тут вопрос - именно о назначении такого диапазона, в котором числа могут быть вписаны макросом, но не распознаются для вызова дополнительного пересчета.
Добрый вечер, народ. Есть вопрос.
При пересчете листа - простой макрос-счетчик добавляет числа в две ячейки (F9 и I11). Рядом стоит формула Случмежду. При срабатывании пересчета - начинается бесконечная цепная реакция.
Вопрос - как создать "слепую зону" в виде диапазона E7:J13 - в котором событие Workbook_SheetCalculate не действует ? То есть во всей книге действует, а в определенном диапазоне определенного листа - не действует. Это означает - что числа вписываются макросом в этот диапазон, но не вызывают дополнительного пересчета листа.
Причем тут вопрос - именно о назначении такого диапазона, в котором числа могут быть вписаны макросом, но не распознаются для вызова дополнительного пересчета.OlegSmirnov
Pelena, по условиям задачи - речь идет о создании ДИАПАЗОНА, в котором событие calculate - не срабатывает. А не включении-отключении событий.
Pelena, по условиям задачи - речь идет о создании ДИАПАЗОНА, в котором событие calculate - не срабатывает. А не включении-отключении событий.OlegSmirnov
OlegSmirnov, указанное событие не имеет адреса пересчитываемых ячеек. А ответа на вопрос - зачем это нужно и чем не устраивает Application.EnableEvents = False так и не последовало.
OlegSmirnov, указанное событие не имеет адреса пересчитываемых ячеек. А ответа на вопрос - зачем это нужно и чем не устраивает Application.EnableEvents = False так и не последовало.Апострофф
Апострофф, потому что нужно настроить срабатывание макроса - именно на конкретный диапазон. А если рассматривать операцию включения-отключения событий - то вопрос можно перефразировать так:
Как при изменении ячеек определенного диапазона - макросом - включать перед этим изменением Application.EnableEvents = False, а по завершении изменения ячейки этого диапазона - опять возвращать Application.EnableEvents = True ?
Апострофф, потому что нужно настроить срабатывание макроса - именно на конкретный диапазон. А если рассматривать операцию включения-отключения событий - то вопрос можно перефразировать так:
Как при изменении ячеек определенного диапазона - макросом - включать перед этим изменением Application.EnableEvents = False, а по завершении изменения ячейки этого диапазона - опять возвращать Application.EnableEvents = True ?OlegSmirnov
Как при изменении ячеек определенного диапазона - макросом - включать перед этим изменением Application.EnableEvents = False, а по завершении изменения ячейки этого диапазона - опять возвращать Application.EnableEvents = True
Как при изменении ячеек определенного диапазона - макросом - включать перед этим изменением Application.EnableEvents = False, а по завершении изменения ячейки этого диапазона - опять возвращать Application.EnableEvents = True
В этом случае для первой строчки Sheets("Лист3").Range("А4") = Sheets("Лист3").Range("А4") + 1 отключение событий вообще НЕ ДОЛЖНО действовать - потому что А4 - НЕ ВХОДИТ в диапазон E7:J13 А вот для второй строчки Sheets("Лист3").Range("I11") = Sheets("Лист3").Range("I11") + 1 отключение событий ДОЛЖНО действовать - потому что I11 - входит в диапазон E7:J13
Ведь наименования ячеек внутри Range("") - будут меняться постоянно. С вашим кодом придется по несколько десятков раз в день - залезать в код и изменять его.
А я спрашивал, про то - как привязать включение-отключение событий к определенному диапазону на листе экселя, а не к определенной строке макроса.
Апострофф, а где в вашем коде - указание на диапазон E7:J13 ?
В этом случае для первой строчки Sheets("Лист3").Range("А4") = Sheets("Лист3").Range("А4") + 1 отключение событий вообще НЕ ДОЛЖНО действовать - потому что А4 - НЕ ВХОДИТ в диапазон E7:J13 А вот для второй строчки Sheets("Лист3").Range("I11") = Sheets("Лист3").Range("I11") + 1 отключение событий ДОЛЖНО действовать - потому что I11 - входит в диапазон E7:J13
Ведь наименования ячеек внутри Range("") - будут меняться постоянно. С вашим кодом придется по несколько десятков раз в день - залезать в код и изменять его.
А я спрашивал, про то - как привязать включение-отключение событий к определенному диапазону на листе экселя, а не к определенной строке макроса.OlegSmirnov
OlegSmirnov, все угорают, наверно, пытаясь угадать - что вы сочините для следующей отмазки типа "всё не то и не так" [vba]
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) With Sheets("Лист3") Application.EnableEvents = Intersect(.Range(.[D2]), .[e7:j13]) Is Nothing .Range(.[D2]) = .Range(.[D2]) + 1 Application.EnableEvents = True Application.EnableEvents = Intersect(.Range(.[E2]), .[e7:j13]) Is Nothing .Range(.[E2]) = .Range(.[E2]) + 1 Application.EnableEvents = True End With End Sub
[/vba]
OlegSmirnov, все угорают, наверно, пытаясь угадать - что вы сочините для следующей отмазки типа "всё не то и не так" [vba]
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) With Sheets("Лист3") Application.EnableEvents = Intersect(.Range(.[D2]), .[e7:j13]) Is Nothing .Range(.[D2]) = .Range(.[D2]) + 1 Application.EnableEvents = True Application.EnableEvents = Intersect(.Range(.[E2]), .[e7:j13]) Is Nothing .Range(.[E2]) = .Range(.[E2]) + 1 Application.EnableEvents = True End With End Sub
1. В ячейки D2 и E2 - вписаны адреса F9 и I12 (входящие в диапазон E7:J13). Жму на синюю кнопку макроса. Макрос срабатывает - добавляя в ячейки F9 и I12 - числа (как он и должен срабатывать). Но это запускает пересчет листа - чего по идее - быть не должно. То есть - несмотря на то, что изменение ячеек происходит в диапазоне E7:J13 (который не должен запускать пересчет листа) - событие Workbook_SheetCalculate все равно действует - все равно запускается пересчет листа.
2. В ячейки D2 и E2 - вписаны адреса B4 и C5 (НЕ входящие в диапазон E7:J13). Тут же начинается - бесконечный пересчет листа. То есть вроде бы, поскольку эти ячейки - не входят в диапазон E7:J13 - то пересчет листа допустим.... Но не бесконечно, как в данном случае.
Апострофф, код не работает.
Происходит следующее:
1. В ячейки D2 и E2 - вписаны адреса F9 и I12 (входящие в диапазон E7:J13). Жму на синюю кнопку макроса. Макрос срабатывает - добавляя в ячейки F9 и I12 - числа (как он и должен срабатывать). Но это запускает пересчет листа - чего по идее - быть не должно. То есть - несмотря на то, что изменение ячеек происходит в диапазоне E7:J13 (который не должен запускать пересчет листа) - событие Workbook_SheetCalculate все равно действует - все равно запускается пересчет листа.
2. В ячейки D2 и E2 - вписаны адреса B4 и C5 (НЕ входящие в диапазон E7:J13). Тут же начинается - бесконечный пересчет листа. То есть вроде бы, поскольку эти ячейки - не входят в диапазон E7:J13 - то пересчет листа допустим.... Но не бесконечно, как в данном случае.OlegSmirnov
Сообщение отредактировал OlegSmirnov - Суббота, 10.03.2018, 12:21
Но это запускает пересчет листа - чего по идее - быть не должно.
Это только по вашей идее. Функция СЛУЧМЕЖДУ() относиться к категории "летучих", которые пересчитываются при каждом чихе. При нажатии на "синюю кнопку", эта функция пересчитывается дважды. И сначала она пересчитывается, а только после этого наступает событие Worksheet_Calculate.
Но это запускает пересчет листа - чего по идее - быть не должно.
Это только по вашей идее. Функция СЛУЧМЕЖДУ() относиться к категории "летучих", которые пересчитываются при каждом чихе. При нажатии на "синюю кнопку", эта функция пересчитывается дважды. И сначала она пересчитывается, а только после этого наступает событие Worksheet_Calculate.RAN
RAN, тогда вопрос- как временно отключить Летучую функцию - на время отключения макроса ? Я имею ввиду - есть же в экселе такая штука как вычисления вручную Application.Calculation = xlManual А после срабатывания макроса - можно опять включить автоматические вычисления Application.Calculation = xlAutomatic
Тогда Случмежду - не будет срабатывать во время выполнения макроса - там где требуется.
Вот как при помощи этих возможностей решить задачу ?
RAN, тогда вопрос- как временно отключить Летучую функцию - на время отключения макроса ? Я имею ввиду - есть же в экселе такая штука как вычисления вручную Application.Calculation = xlManual А после срабатывания макроса - можно опять включить автоматические вычисления Application.Calculation = xlAutomatic
Тогда Случмежду - не будет срабатывать во время выполнения макроса - там где требуется.
Вот как при помощи этих возможностей решить задачу ?OlegSmirnov
Сообщение отредактировал OlegSmirnov - Суббота, 10.03.2018, 19:15
Да никак. Функция сначала пересчитывается (отпирает дверь), затем срабатывает событие пересчет (дверь открывается). Нет, может как и можно, но я не знаю, как. Это к домушникам.
Да никак. Функция сначала пересчитывается (отпирает дверь), затем срабатывает событие пересчет (дверь открывается). Нет, может как и можно, но я не знаю, как. Это к домушникам. RAN