View Single Post
  #12   Report Post  
Posted to microsoft.public.excel.programming
Trevor Williams Trevor Williams is offline
external usenet poster
 
Posts: 181
Default 60 Second Countdown NOT using the WAIT function...

OK - thanks again Nigel. I'll give it a go!

Trevor

"Nigel" wrote:

Unlike Application.Wait where the next code step is only executed after the
waiting time, Application.OnTime, triggers a time function that starts
independently and does not cause your code to halt, but will initiate a
procedure at the end of the OnTime . Your sequencing code is currently
dependent on this delay. So in its current form will not work with OnTime.

You will need to change the way the LEDs sequence, from the first to the
last cell, keeping track of which is the next cell to act upon and decrement
your clock counter cell. This code would be triggered by the OnTime event
time out. As the timer is running independent of the code, the user can
interact with the worksheet.

Sub StartTimer
Application.OnTime Now + TimeValue("00:00:01"), "xTick"
End Sub

Sub xTick()
Range("Clock") = Range("Clock") - 1
If Range("Clock") 0 Then StartTimer

' your code to control the leds goes here adapted to keep track of which
led to act upon


End Sub



--
Cheers
Nigel



"Trevor Williams" wrote in
message ...
Hi Nigel - me again!

I've been dabbling with your code but just can't suss out where 'my code'
should go. Could you possibly point me in the right direction. I
currently
have the following (using the old Application.Wait method).

(the Range("LEDS") is a series of cells that change from green to gray
after
each second passes and Range("Clock") is the cell that has the countdown
number in it.)

Thanks!


Sub countdown()

Dim rng1 As Range
Dim Cell As Range

Set rng1 = Worksheets("Auction Room").Range("LEDS")

i = 0

For Each Cell In rng1

If Cell.Interior.ColorIndex = 51 Then
Range("Clock") = Range("Clock") - 1
Cell.Interior.ColorIndex = 38
Cell.Font.ColorIndex = 38
Application.Wait (Now + TimeValue("0:00:01"))
If Range("Clock") = 10 Then Range("Clock").Font.ColorIndex = 3
End If

i = i + 1

Next Cell

Range("LEDS").Font.ColorIndex = 0

End Sub

"Nigel" wrote:

You can set the OnTime function to occur at some future point e.g. 1
secs.
This could trigger your cell count down, and then restart the ontime
event.again until the cell value reaches zero.

Whilst the ontime events are running you can interact with your workbook,
so
a user action could cancel the ontime event, carry out the user actions
and
then restart the ontime events.

This procedure gives you the countdown, the rest depends on what the user
interaction will be

Sub timerA1()
Application.OnTime Now + TimeValue("00:00:01"), "xTick"
End Sub

Sub xTick()
With Sheets("Sheet1")
.Range("A1") = .Range("A1") - 1
If .Range("A1") 0 Then timerA1
End With
End Sub



--
Cheers
Nigel



"Trevor Williams" wrote in
message ...
Hi Nigel,

I don't think the OnTime funtion will work as it waits for a
pre-defined
time before it runs a procedure, and since I don't know when the user
wants
to stop the countdown, I can't set it.

Is that right, or am I missing something?

Any other ideas?

Thanks

"Nigel" wrote:

Maybe you could use the Application.OnTime function ??

--
Cheers
Nigel



"Trevor Williams" wrote in
message ...
Hi all

I am creating a 60 second countdown in XL2002 which currently uses
the
system time and the wait function: Application.Wait (Now +
TimeValue("0:00:01")). After each second a cell value decreases (60
down
to
0) and another cells Interior.Colorindex is changed.

This works well, but I need to be able to interupt the countdown to
add
data, and then resume the countdown - something that can't be done
using
the
wait function.

I would like to interupt the countdown by pressing a button, which
in
turn
pops up a userform to add data to a table - (again, something that
works
but
not whilst the countdown is working!)

Is there another way of approaching this?

Thanks in advance!

Trevor