2013-07-29 3 views
2

Одна из моих таблиц посвящена различным вычислениям, включая, помимо прочего, текущую дату и время, и было бы неплохо, если бы она автоматически обновлялась сама по себе, а не вручную F9 или изменения одной из ячеек.Excel: пересчет каждые x секунд

Есть ли какой-либо способ в Excel настроить таблицу для автоматического пересчета через каждые x секунд?

Мне не удалось найти параметр в самом Excel, возможно, указав, что такой функции не существует. Если нет, может ли это быть достигнуто с помощью VBA? (Последний может или не может звучать как глупый вопрос, но у меня нет предыдущего опыта написания макросов Excel и, как такового, не знаю, каковы его возможности в плане управления электронными таблицами.)

+0

Лучшее решение, вероятно, чтобы установить его пересчитывать, когда пользователь взаимодействует с ним каким-либо образом, например, с событием Worksheet_SelectionChange. – mattboy

ответ

6

Этот код будет создавать часы, обновляемые каждые 10 секунд.
Обратите внимание, что это только обновит специфические клетки, а не всю книгу - это означает, что вы можете оставить параметры расчета на то, что вы счастливы с:

Dim SchedRecalc As Date 

Sub Recalc() 
'Change specific cells 
Range("A1").Value = Format(Now, "dd-mmm-yy") 
Range("A2").Value = Format(Time, "hh:mm:ss AM/PM") 
'or use the following line if you have a cell you wish to update 
Range("A3").Calculate 

Call StartTime ' need to keep calling the timer, as the ontime only runs once 
End Sub 

Sub StartTime() 
SchedRecalc = Now + TimeValue("00:00:10") 
Application.OnTime SchedRecalc, "Recalc" 
End Sub 

Sub EndTime() 
On Error Resume Next 
Application.OnTime EarliestTime:=SchedRecalc, _ 
     Procedure:="Recalc", Schedule:=False 
End Sub 

и, чтобы убедиться, что он останавливается, в Это пособие модуль:

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
EndTime 
End Sub 
+0

Должен ли 'StartTime' вызываться из' Worksheet.Activate' или что-то еще? –

+0

@ Devil'sAdvocate, его можно вызывать из любой подпрограммы - вы можете связать старт и остановиться, например, с горячей клавишей. Вам нужно позвонить в StartTime откуда-то, чтобы получить его в цикле – SeanC

+0

Это решение не работает вообще, если вы открываете другую книгу. Он начинает обновлять ячейки в этой книге и записывает даты и время в эту книгу. (Тем не менее, это Excel 2016 на Mac, поэтому это может быть проблема Mac/2016 ...) С другой стороны, работа в другой книге, кажется, обновляет все книги ... um. – Erk

2

Перейти к разработке Visual Basic Editor - Щелкните правой кнопкой мыши книгу - вставить модуль (убедитесь, что у вас есть ручной расчет

в модуле

Sub run_over 
Timetorun = Now + timevalue("00:00:10") 
application.ontime timetorun,"Refresh_all" 
End Sub 

Sub Refresh_all 
Activeworkbook.Refreshall 
End Sub 

Sub auto_close() 
Application.OnTime timetorun, Refresh_all, , False 
End Sub 

изменения времени в формате «00:00:00» в соответствии с требованиями

+0

Но будет ли «ActiveWorkbook» действительно делать то, что вы хотите, если вы будете наматывать на другие листы Excel, когда это работает? Мне кажется, что это «окно сверху»? – Erk

Смежные вопросы