Страницы: 1
RSS
Прекращение вычислений на листе при определенном значении одной из ячеек
 
Можно ли сделать так, чтобы вычисления на листе (в книге) прекратились в тот момент, когда одна из ячеек в процессе вычисления станет равной какому-либо значению? Понимаю, что такого можно добиться за счет процедур обработки события, но может быть есть какие-то другие способы и функции (например, принудительного завершения всех вычислений на листе или что-то вроде этого)??  
 
Заранее благодарен за ответ
 
Вижу решение только по событиям.
 
Тогда тот же самый вопрос, но в заданной ячейке установлена Пользовательская функция. Как то из Пользовательской функции можно прекратить все вычисления на листе???
 
Метод Calculate можно применять не только ко всему листу, но и к диапазону (см. Справку по Range.Calculate Method). Соответственно, Вы можете контролировать процесс расчета листа и остановить его при определенном условии.
 
зачем?  
 
не встречался с такой неоходимостью раньше..  
 
может быть вашу задачу(основную, останов вычислений предполагаю вспомогательной) можно решить по-другому?
Живи и дай жить..
 
по поводу ЗАЧЕМ!!!  
 
В случае, если в ячейке Пользовательская функция дает какое-то значение, то это делает бессмысленным (по условиям задачи) все последующие (и возможно продолжительные) расчеты в книге. В этом случае хотелось бы просто проинофрмировать пользователя с помощью текстового сообщения об ошибки в условиях задачи и прекратить все последующие расчеты, не вводя пользователя в заблуждении при ожидании результатов расчета.    
По поводу метода Calculate сам думал, но хотелось бы чтобы вычисления принудительно завершились, при этом при новых изменениях данных в книге система опять в автоматическом режиме стала производить расчет!! (т.е. нужно опять скорректировать метод Calculate, но не в тойже Пользовательской функции!!! Тогда где, в обработке событий? Может есть какие-то другие пути?)
 
Предыдущее сообщение мое. Забыл указать пользователя.
 
Вот Вам простой пример, см. код листа.  
В А1 значение, которое Вы вводите, в остальных ячейках формулы.  
Если в А4 получается значение >20, вычисления останавливаются.  
Попробуйте ввести в А1 2, потом 3.
 
Казанский  
Сообщение то выдается, а расчет всех последующих формул в ячейке продолжается...  
А мне надо, чтобы прекратился......  
 
Спасибо, но надо что-то добавить...
 
Что значит "расчет всех последующих формул в ячейке продолжается..." ?!    
Вот я ввожу А1=10. В А2-А4 значения изменяются, выдается сообщение, после закрытия сообщения в А5-А9 остаются прежние значения (см. скриншот). У Вас не так?  
Может, Вы включили автоматические вычисления?
 
Может всё проще? В ячейке А1 некая формула, если её значение превысит 10 - автовычисление отключается.  
Private Sub Worksheet_Calculate()  
   If Range("A1") > 10 Then Application.Calculation = xlManual  
End Sub
 
Ответ для Казанский: Вы правы, была установлена опция автоматические вычисления. Ваш метод интересен тем, что происходит поячеечное вычисление согласно условия.  
 
Ответ для Юрий М:  
Проблема в том, что систему нужно затем специально переводить в автоматический режим вычислений. В решении Казанский она тоже в ручном режиме, но переводить в автоматический режим не требуется!!  
 
Я думал (вернее надеялся), что в Excel есть какая-то глобальная функции типа Exit Function, которая позволяет остановить работу Exel непосредственно из пользовательской функции, но при этом сам Exel сохранял бы возможность автоматических вычислений при новом введении информации в какую-либо ячейку.    
 
Если не получится как-то поиграться с Application.Calculation (что идеолгически красивее), то придется использовать 1-ый способ с поячеечным вычислением  
 
Спасибо всем
 
{quote}{login=evgeniy234}{date=09.09.2010 02:53}{thema=}{post}Я думал (вернее надеялся), что в Excel есть какая-то глобальная функции типа Exit Function...{/post}{/quote}  
В Excel есть встроенный инструмент "итеративные вычисления": Сервис-Параметры-Вычисления-Итерации-Погрешность. Может, там порыться?
 
На самом деле, вычислять можно не поячеечно, а подиапазонно.  
То есть сначала Вы делаете пересчет диапазона, от которого зависит значение определяющей ячейки, и самой этой ячейки. Можно одной командой пересчитать несколько несвязных диапазонов:  
 
range("A1:B10,D3:K4,F7").calculate  
 
Потом проверить значение ячейки и, если решение положительное, запустить пересчет всего листа:  
 
activesheet.calculate
 
спасибо всем попробую....
Страницы: 1
Читают тему
Наверх