2015-03-03 4 views
0

Прежде всего, я должен сказать, что у меня нет соответствующего опыта в VBA, но мне очень нужно сделать таймер в excel. Мне удалось создать кнопки остановки и запуска таймера. Но у меня есть 20 разных таймеров с кнопками запуска и остановки. Я хочу создать кнопку, которая будет автоматически запускать все таймеры, позволяя мне индивидуально останавливать один таймер.два процесса в VBA

Я создал следующий код, чтобы начать и остановить их. Но когда я остановить один из таймеров, которые я получаю следующее сообщение об ошибке: "Ошибка выполнения„1004“:.„Method ONTIME“из object'_application не удалось

Код для двух кнопками пуска и останова является:

Sub startTimer27() 
Application.OnTime Now + TimeValue("00:00:01"), "Increment_count27" 
End Sub 

Sub Increment_count27() 
Range("B2").Value = Range("B2") + 1 
Range("B11").Value = Range("B11") + 1 
Range("B19").Value = Range("B19") + 1 
Range("B25").Value = Range("B25") + 1 
Range("B33").Value = Range("B33") + 1 
startTimer27 
End Sub 

Sub stopTimer27() 
Application.OnTime Now + TimeValue("00:00:01"), "Increment_count27", Schedule:=False 
End Sub 
+0

имеют выпадающий список со всеми именами таймеров и «Все таймеры», имеют 2 кнопки, связанные с двумя функциями -start и stop, которые принимают параметр имени начала таймера (sTimer as String), как пример –

+0

Что вы имеете в виду по выпадающему меню? Можете ли вы подробнее рассказать? – Neacel

+0

Проверка данных, установка в список и предоставление диапазона для имен таймеров, тогда функция будет передана ячейкой vaue, содержащей выпадающий список –

ответ

2

вы рассматривали использование глобальных переменных сохранения текущего значения времени

Sub startTimer27() 
starttime = Now 
'MsgBox("The timer is running.") 
End Sub 

Sub stopTimer27() 
timetaken = Now - starttime 
MsgBox ("The time elapsed is " & Hour(timetaken) & ":" & Minute(timetaken) & ":" & Second(timetaken)) 
End Sub 

конечно с вашим примером было бы как:

Public starttime(1 To 20) As Date 
Sub cvbstartTimer27() 
For i = 1 To 20 
    starttime(i) = Now 
Next 
End Sub 

Если вам нужно специально остановить его, то вам придется также дать ему значение Boolean, это было бы верно, когда таймер работает и false, когда он остановлен. Недостаток этого значения не означает, что ваш код является неправильным.

+1

Есть ли причина, по которой вы не используете Format (timetaken, «HH: mm: ss») в вашей строке MsgBox? –

+0

Вы правы, я не думал об этом методе. – user3819867

+0

Спасибо за ваши ответы. Я очень неопытен в VBA, поэтому я действительно ничего не считаю. Я попробую. благодаря – Neacel

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