Добрый день! Вопрос общий, не касается конкретного случая. Имеется некоторый файл с множеством листов. На каждом листе свой набор формул, в том числе формул массива. Как определить время расчета формул на каждом листе? Чтобы в дальнейшем понимать, на каком листе упростить формулы.
Добрый день! Вопрос общий, не касается конкретного случая. Имеется некоторый файл с множеством листов. На каждом листе свой набор формул, в том числе формул массива. Как определить время расчета формул на каждом листе? Чтобы в дальнейшем понимать, на каком листе упростить формулы.Мурад
Если вопрос общий, то и ответ общий :-) Включаем ручной пересчет листа и запускаем макрос, который запоминает текущее время, запускает пересчет текущего листа и снова смотрит снова на время.
Разница между этими двумя значениями и будет длительность расчета текущего листа.
Если вопрос общий, то и ответ общий :-) Включаем ручной пересчет листа и запускаем макрос, который запоминает текущее время, запускает пересчет текущего листа и снова смотрит снова на время.
Разница между этими двумя значениями и будет длительность расчета текущего листа.Samaretz
Sub timer() sc_ = ThisWorkbook.Sheets.Count ac_ = Application.Calculation Application.Calculation = xlCalculationManual For i = 1 To sc_ t_ = Now Sheets(i).Calculate tt_ = Now - t_ kk = Sheets(i).Name ActiveSheet.Range("A" & i).Value = kk ActiveSheet.Range("B" & i) = Format(tt_ / 24 / 60 / 60, "hh:mm:ss") Next i Application.Calculation = ac_ End Sub
[/vba] В результате запуска макроса время на всех листах по нулям, хотя я ждал не менее 5 секунд. Часть кода: [vba]
Код
tt_ = Now - t_
[/vba] не есть равно 0, ведь выше написано [vba]
Код
t_ = Now
[/vba]?
Саша, получается вот так: [vba]
Код
Sub timer() sc_ = ThisWorkbook.Sheets.Count ac_ = Application.Calculation Application.Calculation = xlCalculationManual For i = 1 To sc_ t_ = Now Sheets(i).Calculate tt_ = Now - t_ kk = Sheets(i).Name ActiveSheet.Range("A" & i).Value = kk ActiveSheet.Range("B" & i) = Format(tt_ / 24 / 60 / 60, "hh:mm:ss") Next i Application.Calculation = ac_ End Sub
[/vba] В результате запуска макроса время на всех листах по нулям, хотя я ждал не менее 5 секунд. Часть кода: [vba]
Sub timer() sc_ = ThisWorkbook.Sheets.Count ac_ = Application.Calculation Application.Calculation = xlCalculationManual For i = 1 To sc_ t_ = Now Sheets(i).Calculate tt_ = Now - t_ ActiveSheet.Range("A" & i).Value = Sheets(i).Name ActiveSheet.Range("B" & i) = Format(tt_, "hh:mm:ss") Next i Application.Calculation = ac_ End Sub
[/vba] Э, стоп! Я почему у Вас макрос называется timer? Переназывайте и все работать будет по первому варианту
Ну да, еще в формате [vba]
Код
Sub timer() sc_ = ThisWorkbook.Sheets.Count ac_ = Application.Calculation Application.Calculation = xlCalculationManual For i = 1 To sc_ t_ = Now Sheets(i).Calculate tt_ = Now - t_ ActiveSheet.Range("A" & i).Value = Sheets(i).Name ActiveSheet.Range("B" & i) = Format(tt_, "hh:mm:ss") Next i Application.Calculation = ac_ End Sub
[/vba] Э, стоп! Я почему у Вас макрос называется timer? Переназывайте и все работать будет по первому варианту_Boroda_
Единственное, что поменял в Вашем коде, явилось ошибкой . Вот что значит, кривые руки. Вставил первый вариант в исходном виде, определил самый тяжелый лист. Спасибо, Саша, за старания! Универсальным и очень полезным средством считаю этот код.
Единственное, что поменял в Вашем коде, явилось ошибкой . Вот что значит, кривые руки. Вставил первый вариант в исходном виде, определил самый тяжелый лист. Спасибо, Саша, за старания! Универсальным и очень полезным средством считаю этот код.Мурад