можно поставить задержку после передачи данных на лист.
Коля, с этого места чуть подробне. В какой момент задержку? На сколько? Изменение 1 TB может ничего не изменить, кроме 1 ячейки на листе, а может вызвать лавину пересчета по всем листам книги.
[offtop]PS с этой задачей меня посещает уже 4 Муза. 3 первых посидели, и ушли. Может с четвертой что получиться?[/offtop]
можно поставить задержку после передачи данных на лист.
Коля, с этого места чуть подробне. В какой момент задержку? На сколько? Изменение 1 TB может ничего не изменить, кроме 1 ячейки на листе, а может вызвать лавину пересчета по всем листам книги.
[offtop]PS с этой задачей меня посещает уже 4 Муза. 3 первых посидели, и ушли. Может с четвертой что получиться?[/offtop]RAN
Как обнаружил, при наличии летучих формул, пересчет книги происходит даже при внесении изменений в другую книгу.
Тогда добавим глобальную переменную, считающую пересчитанные листы до "яяяяяя". Если изменения произошли только на "яяяяяя" за счёт летучей СЛЧИС (как в случае пересчёта в других книгах), то реакции нет - "ОченьПолезныйМакрос" не запускается: [vba]
Код
Dim countCalculatedSheets As Integer
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) If Sh.Name = "яяяяяя" Then If countCalculatedSheets > 0 Then MsgBox "Запуск ОченьПолезногоМакроса" countCalculatedSheets = 0 End If Else countCalculatedSheets = countCalculatedSheets + 1 End If End Sub
Как обнаружил, при наличии летучих формул, пересчет книги происходит даже при внесении изменений в другую книгу.
Тогда добавим глобальную переменную, считающую пересчитанные листы до "яяяяяя". Если изменения произошли только на "яяяяяя" за счёт летучей СЛЧИС (как в случае пересчёта в других книгах), то реакции нет - "ОченьПолезныйМакрос" не запускается: [vba]
Код
Dim countCalculatedSheets As Integer
Private Sub Workbook_SheetCalculate(ByVal Sh As Object) If Sh.Name = "яяяяяя" Then If countCalculatedSheets > 0 Then MsgBox "Запуск ОченьПолезногоМакроса" countCalculatedSheets = 0 End If Else countCalculatedSheets = countCalculatedSheets + 1 End If End Sub
Всем здравствуйте. Полгода я здесь не появлялся. Может и сейчас не надо было? Чёй то мне кажется, Workbook_SheetCalculate не все подряд листы обрабатывает, а вроде как то выборочно, по сему, лист "яяяяяя" .... Но, это мне кажется. Проверять надо. А вот если принудительно, то мне так видится. [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) For i = 1 To 3 Worksheets(i).Calculate Next 'код End Sub
[/vba]
Всем здравствуйте. Полгода я здесь не появлялся. Может и сейчас не надо было? Чёй то мне кажется, Workbook_SheetCalculate не все подряд листы обрабатывает, а вроде как то выборочно, по сему, лист "яяяяяя" .... Но, это мне кажется. Проверять надо. А вот если принудительно, то мне так видится. [vba]
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) For i = 1 To 3 Worksheets(i).Calculate Next 'код End Sub
все-таки не понятно Смысл затеи - обновить форму (ShowModal=false), после окончания пересчета книги. Допустим 1-я строчка кода записывает данные на лист, что приводит к пересчету листа (листов) 2-я строка - обновление формы. М/у 1-й и 2-й Ексель будет пересчитывать связанные формулы на всех связанных листах. При этом макрос будет стоять на тормозе. Как только формулы пересчитаются, выполнение перейдет ко 2-й строчке. Разве не так? (на всякий случай проверил, - именно так) Под задержкой имелось в виду Doevents, здесь это не нужно.
upd Это если включен автоматический пересчет. Если ручной, - то Calculate
все-таки не понятно Смысл затеи - обновить форму (ShowModal=false), после окончания пересчета книги. Допустим 1-я строчка кода записывает данные на лист, что приводит к пересчету листа (листов) 2-я строка - обновление формы. М/у 1-й и 2-й Ексель будет пересчитывать связанные формулы на всех связанных листах. При этом макрос будет стоять на тормозе. Как только формулы пересчитаются, выполнение перейдет ко 2-й строчке. Разве не так? (на всякий случай проверил, - именно так) Под задержкой имелось в виду Doevents, здесь это не нужно.
upd Это если включен автоматический пересчет. Если ручной, - то Calculatenilem
Яндекс.Деньги 4100159601573
Сообщение отредактировал nilem - Суббота, 04.11.2017, 00:08
Так...так..так... Идея Николая кажтся наиболее преспективной. Обмозговать треба! Gustav, Wasilich, спасибо, но ваши варианты, пока, на мой взгляд, 2 очереди.
Так...так..так... Идея Николая кажтся наиболее преспективной. Обмозговать треба! Gustav, Wasilich, спасибо, но ваши варианты, пока, на мой взгляд, 2 очереди.RAN
Допустим 1-я строчка кода записывает данные на лист
да, будет работать. А если меняем данные на листе? Этой строчки кода нет, а перерисовывать форму надо. Так что буду пытать вариант Константина. Или, альтернативный вариант, паузу Sleep в цикле до окончания пересчета.
Спал я уже... Сей вариант не пойдет по одной простой причине -
Допустим 1-я строчка кода записывает данные на лист
да, будет работать. А если меняем данные на листе? Этой строчки кода нет, а перерисовывать форму надо. Так что буду пытать вариант Константина. Или, альтернативный вариант, паузу Sleep в цикле до окончания пересчета.RAN