Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 126
Default how to get onkey macro to fire while another macro is running

Hello to all you Excel Wizards,

I have a macro that does some quick and dirty animation with an embedded chart (I just use a simple loop, and the Escape key to halt). I'm pretty happy with how the animation works but I'd like to enable some keypress commands to control the animation, and excel does not respond to keystrokes while my animation macro is running. This behavior actually makes some sense since you can't click on cells or do anything else while the animation macro is running. I use Application.EnableCancelKey to respond to a press of the Escape key. But Application.OnKey does not work for other keys.

Is there any way to allow my animation macro to respond to presses of other keys besides Escape?

I might point out that I have successfully worked out using mouse movements to control the animation stream. If the mouse isn't moving, the animation plays normally. If the mouse is moved to the right(or left) the animation plays forward (or backward) as long as the mouse keeps moving. Otherwise it starts to play normally again. I'm using the API call GetCursorPos to do this. This is pretty cool. At least to me.

Anyway, responding to some other keystrokes would be nice. I hope it can be done without diving into classes and events, which I suppose is possible since the animation is being done with a single excel chart.

Thanks,

Brian Murphy
Austin, Texas

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 27,285
Default how to get onkey macro to fire while another macro is running

I think you would need to subclass Excel and or hook into the keyboard
buffer. See this thread by Stratos

http://groups.google.com/groups?thre...9237C%40iti.gr

for some ideas.



--
Regards,
Tom Ogilvy

"Brian Murphy" wrote in message
...
Hello to all you Excel Wizards,

I have a macro that does some quick and dirty animation with an embedded
chart (I just use a simple loop, and the Escape key to halt). I'm pretty
happy with how the animation works but I'd like to enable some keypress
commands to control the animation, and excel does not respond to keystrokes
while my animation macro is running. This behavior actually makes some
sense since you can't click on cells or do anything else while the animation
macro is running. I use Application.EnableCancelKey to respond to a press
of the Escape key. But Application.OnKey does not work for other keys.

Is there any way to allow my animation macro to respond to presses of other
keys besides Escape?

I might point out that I have successfully worked out using mouse movements
to control the animation stream. If the mouse isn't moving, the animation
plays normally. If the mouse is moved to the right(or left) the animation
plays forward (or backward) as long as the mouse keeps moving. Otherwise it
starts to play normally again. I'm using the API call GetCursorPos to do
this. This is pretty cool. At least to me.

Anyway, responding to some other keystrokes would be nice. I hope it can be
done without diving into classes and events, which I suppose is possible
since the animation is being done with a single excel chart.

Thanks,

Brian Murphy
Austin, Texas


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 22
Default how to get onkey macro to fire while another macro is running

Thanks for the reply, Tom. It looks like classing the chart so I can use
events would be the easiest way to do this. I've done some of this before
with my chartool.xla utility, so I should be able to do it again.

Cheers,

Brian





"Tom Ogilvy" wrote in message
...
I think you would need to subclass Excel and or hook into the keyboard
buffer. See this thread by Stratos

http://groups.google.com/groups?thre...9237C%40iti.gr

for some ideas.



--
Regards,
Tom Ogilvy

"Brian Murphy" wrote in message
...
Hello to all you Excel Wizards,

I have a macro that does some quick and dirty animation with an embedded
chart (I just use a simple loop, and the Escape key to halt). I'm pretty
happy with how the animation works but I'd like to enable some keypress
commands to control the animation, and excel does not respond to

keystrokes
while my animation macro is running. This behavior actually makes some
sense since you can't click on cells or do anything else while the

animation
macro is running. I use Application.EnableCancelKey to respond to a press
of the Escape key. But Application.OnKey does not work for other keys.

Is there any way to allow my animation macro to respond to presses of

other
keys besides Escape?

I might point out that I have successfully worked out using mouse

movements
to control the animation stream. If the mouse isn't moving, the animation
plays normally. If the mouse is moved to the right(or left) the animation
plays forward (or backward) as long as the mouse keeps moving. Otherwise

it
starts to play normally again. I'm using the API call GetCursorPos to do
this. This is pretty cool. At least to me.

Anyway, responding to some other keystrokes would be nice. I hope it can

be
done without diving into classes and events, which I suppose is possible
since the animation is being done with a single excel chart.

Thanks,

Brian Murphy
Austin, Texas




  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 27,285
Default how to get onkey macro to fire while another macro is running

I don't see any chart events that would be useful in this context. I think
you are in deeper waters than that. Givent that, however, my first thought
was to sprinkle your code with doevents statements, and perhaps that would
let your onkey macros run. I doubt it, but that would be the easiest if it
works. It probably wouldn't be real consistent if it does work, but people
like to repetitively hit the same key until they get a response.

--
Regards,
Tom Ogilvy

"Brian Murphy" wrote in message
...
Thanks for the reply, Tom. It looks like classing the chart so I can use
events would be the easiest way to do this. I've done some of this before
with my chartool.xla utility, so I should be able to do it again.

Cheers,

Brian





"Tom Ogilvy" wrote in message
...
I think you would need to subclass Excel and or hook into the keyboard
buffer. See this thread by Stratos

http://groups.google.com/groups?thre...9237C%40iti.gr

for some ideas.



--
Regards,
Tom Ogilvy

"Brian Murphy" wrote in message
...
Hello to all you Excel Wizards,

I have a macro that does some quick and dirty animation with an embedded
chart (I just use a simple loop, and the Escape key to halt). I'm

pretty
happy with how the animation works but I'd like to enable some keypress
commands to control the animation, and excel does not respond to

keystrokes
while my animation macro is running. This behavior actually makes some
sense since you can't click on cells or do anything else while the

animation
macro is running. I use Application.EnableCancelKey to respond to a

press
of the Escape key. But Application.OnKey does not work for other keys.

Is there any way to allow my animation macro to respond to presses of

other
keys besides Escape?

I might point out that I have successfully worked out using mouse

movements
to control the animation stream. If the mouse isn't moving, the

animation
plays normally. If the mouse is moved to the right(or left) the

animation
plays forward (or backward) as long as the mouse keeps moving.

Otherwise
it
starts to play normally again. I'm using the API call GetCursorPos to

do
this. This is pretty cool. At least to me.

Anyway, responding to some other keystrokes would be nice. I hope it

can
be
done without diving into classes and events, which I suppose is possible
since the animation is being done with a single excel chart.

Thanks,

Brian Murphy
Austin, Texas






  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 126
Default how to get onkey macro to fire while another macro is running

Hello Tom,

I had given DoEvents a try, but it had no affect.

As a test, I threw together the following code, and this didn't
respond either. At least not until the macro aaa() was finished
running.

In my Chartool code, I initialize a class with events on a chart, and
I've successfully got it responding to a host of key presses. So if I
get amibitious enough, I should be able to use that approach for my
animation.

Brian


Sub aaa()
Application.OnKey "{right}", "sub2"
[a1].Select
Do
DoEvents
Selection.Offset(1, 0).Select
DoEvents
For j = 1 To 10000
DoEvents
Next j
DoEvents
i = i + 1
DoEvents
Loop Until i = 10

End Sub

Sub sub2()
MsgBox "right"
DoEvents
End Sub





"Brian Murphy" wrote in message ...
Thanks for the reply, Tom. It looks like classing the chart so I can use
events would be the easiest way to do this. I've done some of this before
with my chartool.xla utility, so I should be able to do it again.

Cheers,

Brian





"Tom Ogilvy" wrote in message
...
I think you would need to subclass Excel and or hook into the keyboard
buffer. See this thread by Stratos

http://groups.google.com/groups?thre...9237C%40iti.gr

for some ideas.



--
Regards,
Tom Ogilvy

"Brian Murphy" wrote in message
...
Hello to all you Excel Wizards,

I have a macro that does some quick and dirty animation with an embedded
chart (I just use a simple loop, and the Escape key to halt). I'm pretty
happy with how the animation works but I'd like to enable some keypress
commands to control the animation, and excel does not respond to

keystrokes
while my animation macro is running. This behavior actually makes some
sense since you can't click on cells or do anything else while the

animation
macro is running. I use Application.EnableCancelKey to respond to a press
of the Escape key. But Application.OnKey does not work for other keys.

Is there any way to allow my animation macro to respond to presses of

other
keys besides Escape?

I might point out that I have successfully worked out using mouse

movements
to control the animation stream. If the mouse isn't moving, the animation
plays normally. If the mouse is moved to the right(or left) the animation
plays forward (or backward) as long as the mouse keeps moving. Otherwise

it
starts to play normally again. I'm using the API call GetCursorPos to do
this. This is pretty cool. At least to me.

Anyway, responding to some other keystrokes would be nice. I hope it can

be
done without diving into classes and events, which I suppose is possible
since the animation is being done with a single excel chart.

Thanks,

Brian Murphy
Austin, Texas




  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 50
Default how to get onkey macro to fire while another macro is running

Howdy Brian,

GetAsyncKeyState might suit your purposes.
Have a play with the following example. You'll see that it responds
to the right arrow key while the loop is running.

Regards,
Vic Eldridge


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As
Long) As Integer
Public Const VK_RIGHT = &H27

Sub Looper()
Range("A1") = 0
Do Until Range("A1") = 10000
Range("A1") = Range("A1") + 1
Range("B1") = GetAsyncKeyState(VK_RIGHT)
Loop
End Sub




"Brian Murphy" wrote in message ...
Hello to all you Excel Wizards,

I have a macro that does some quick and dirty animation with an embedded
chart (I just use a simple loop, and the Escape key to halt). I'm
pretty happy with how the animation works but I'd like to enable some
keypress commands to control the animation, and excel does not respond
to keystrokes while my animation macro is running. This behavior
actually makes some sense since you can't click on cells or do anything
else while the animation macro is running. I use
Application.EnableCancelKey to respond to a press of the Escape key.
But Application.OnKey does not work for other keys.

Is there any way to allow my animation macro to respond to presses of
other keys besides Escape?

I might point out that I have successfully worked out using mouse
movements to control the animation stream. If the mouse isn't moving,
the animation plays normally. If the mouse is moved to the right(or
left) the animation plays forward (or backward) as long as the mouse
keeps moving. Otherwise it starts to play normally again. I'm using
the API call GetCursorPos to do this. This is pretty cool. At least to
me.

Anyway, responding to some other keystrokes would be nice. I hope it
can be done without diving into classes and events, which I suppose is
possible since the animation is being done with a single excel chart.

Thanks,

Brian Murphy
Austin, Texas

  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 126
Default how to get onkey macro to fire while another macro is running

Hello Vic,

That's a great tip.

I ran your sample and it looks like it can do the trick. I'll be
visiting the microsoft site to read up on the GetAsyncKeyState
function.

After thinking about it some more, I don't think my idea of using a
custom class on a chart can work. It can't run an animation loop any
differently than a regular module. Which I think means the event
procedures won't fire while the animation loop is running.

What is really needed is Application.OnTime that can distinguish
hundredths of a second, or at least tenths of seconds, which I don't
think it can. This would allow the animation "loop" to not have to
run continuously.

Anyway, I think your idea is just what I'm looking for.

More testing to do tonight.

Cheers,

Brian
Austin, Texas


(Vic Eldridge) wrote in message m...
Howdy Brian,

GetAsyncKeyState might suit your purposes.
Have a play with the following example. You'll see that it responds
to the right arrow key while the loop is running.

Regards,
Vic Eldridge


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As
Long) As Integer
Public Const VK_RIGHT = &H27

Sub Looper()
Range("A1") = 0
Do Until Range("A1") = 10000
Range("A1") = Range("A1") + 1
Range("B1") = GetAsyncKeyState(VK_RIGHT)
Loop
End Sub




"Brian Murphy" wrote in message ...
Hello to all you Excel Wizards,

I have a macro that does some quick and dirty animation with an embedded
chart (I just use a simple loop, and the Escape key to halt). I'm
pretty happy with how the animation works but I'd like to enable some
keypress commands to control the animation, and excel does not respond
to keystrokes while my animation macro is running. This behavior
actually makes some sense since you can't click on cells or do anything
else while the animation macro is running. I use
Application.EnableCancelKey to respond to a press of the Escape key.
But Application.OnKey does not work for other keys.

Is there any way to allow my animation macro to respond to presses of
other keys besides Escape?

I might point out that I have successfully worked out using mouse
movements to control the animation stream. If the mouse isn't moving,
the animation plays normally. If the mouse is moved to the right(or
left) the animation plays forward (or backward) as long as the mouse
keeps moving. Otherwise it starts to play normally again. I'm using
the API call GetCursorPos to do this. This is pretty cool. At least to
me.

Anyway, responding to some other keystrokes would be nice. I hope it
can be done without diving into classes and events, which I suppose is
possible since the animation is being done with a single excel chart.

Thanks,

Brian Murphy
Austin, Texas

  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default how to get onkey macro to fire while another macro is running

Have you tried the windows timer using callbacks to get that level of time?

--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)

"Brian Murphy" wrote in message
om...
Hello Vic,

That's a great tip.

I ran your sample and it looks like it can do the trick. I'll be
visiting the microsoft site to read up on the GetAsyncKeyState
function.

After thinking about it some more, I don't think my idea of using a
custom class on a chart can work. It can't run an animation loop any
differently than a regular module. Which I think means the event
procedures won't fire while the animation loop is running.

What is really needed is Application.OnTime that can distinguish
hundredths of a second, or at least tenths of seconds, which I don't
think it can. This would allow the animation "loop" to not have to
run continuously.

Anyway, I think your idea is just what I'm looking for.

More testing to do tonight.

Cheers,

Brian
Austin, Texas


(Vic Eldridge) wrote in message

m...
Howdy Brian,

GetAsyncKeyState might suit your purposes.
Have a play with the following example. You'll see that it responds
to the right arrow key while the loop is running.

Regards,
Vic Eldridge


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As
Long) As Integer
Public Const VK_RIGHT = &H27

Sub Looper()
Range("A1") = 0
Do Until Range("A1") = 10000
Range("A1") = Range("A1") + 1
Range("B1") = GetAsyncKeyState(VK_RIGHT)
Loop
End Sub




"Brian Murphy" wrote in message

...
Hello to all you Excel Wizards,

I have a macro that does some quick and dirty animation with an

embedded
chart (I just use a simple loop, and the Escape key to halt). I'm
pretty happy with how the animation works but I'd like to enable some
keypress commands to control the animation, and excel does not respond
to keystrokes while my animation macro is running. This behavior
actually makes some sense since you can't click on cells or do

anything
else while the animation macro is running. I use
Application.EnableCancelKey to respond to a press of the Escape key.
But Application.OnKey does not work for other keys.

Is there any way to allow my animation macro to respond to presses of
other keys besides Escape?

I might point out that I have successfully worked out using mouse
movements to control the animation stream. If the mouse isn't moving,
the animation plays normally. If the mouse is moved to the right(or
left) the animation plays forward (or backward) as long as the mouse
keeps moving. Otherwise it starts to play normally again. I'm using
the API call GetCursorPos to do this. This is pretty cool. At least

to
me.

Anyway, responding to some other keystrokes would be nice. I hope it
can be done without diving into classes and events, which I suppose is
possible since the animation is being done with a single excel chart.

Thanks,

Brian Murphy
Austin, Texas



  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 126
Default how to get onkey macro to fire while another macro is running

Hello Bob,

I have not tried what you suggested. I think once a long time ago I tried to do something referred to as a "callback", and I failed at it. I don't recall what I was trying to do.

I have implemented the GetAsyncKeyState stuff as Vic suggested, and in my testing so far it is working beautifully. I ended up with a single function I call once each time through my animation loop. I'm just checking 4 specific keys. After this function is called my animation loop performs some special actions if one of my key press codes is True. I found I needed the Sleep statement to keep the function from ringing True more than once for a single press of a key.

Function CheckForKeyPress()
keyLeft = (GetAsyncKeyState(VK_LEFT) < 0)
keyRight = (GetAsyncKeyState(VK_RIGHT) < 0)
keyX = (GetAsyncKeyState(VK_X) < 0)
keyY = (GetAsyncKeyState(VK_Y) < 0)
If keyLeft Or keyRight Or keyX Or keyY Then Sleep 50
End Function

I'm elated at how well the animation is working for me. It's a huge improvement over how I first did this some years back.

Cheers,

Brian




"Bob Phillips" wrote in message ...
Have you tried the windows timer using callbacks to get that level of time?

--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)

"Brian Murphy" wrote in message
om...
Hello Vic,

That's a great tip.

I ran your sample and it looks like it can do the trick. I'll be
visiting the microsoft site to read up on the GetAsyncKeyState
function.

After thinking about it some more, I don't think my idea of using a
custom class on a chart can work. It can't run an animation loop any
differently than a regular module. Which I think means the event
procedures won't fire while the animation loop is running.

What is really needed is Application.OnTime that can distinguish
hundredths of a second, or at least tenths of seconds, which I don't
think it can. This would allow the animation "loop" to not have to
run continuously.

Anyway, I think your idea is just what I'm looking for.

More testing to do tonight.

Cheers,

Brian
Austin, Texas


(Vic Eldridge) wrote in message

m...
Howdy Brian,

GetAsyncKeyState might suit your purposes.
Have a play with the following example. You'll see that it responds
to the right arrow key while the loop is running.

Regards,
Vic Eldridge


Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As
Long) As Integer
Public Const VK_RIGHT = &H27

Sub Looper()
Range("A1") = 0
Do Until Range("A1") = 10000
Range("A1") = Range("A1") + 1
Range("B1") = GetAsyncKeyState(VK_RIGHT)
Loop
End Sub




"Brian Murphy" wrote in message

...
Hello to all you Excel Wizards,

I have a macro that does some quick and dirty animation with an

embedded
chart (I just use a simple loop, and the Escape key to halt). I'm
pretty happy with how the animation works but I'd like to enable some
keypress commands to control the animation, and excel does not respond
to keystrokes while my animation macro is running. This behavior
actually makes some sense since you can't click on cells or do

anything
else while the animation macro is running. I use
Application.EnableCancelKey to respond to a press of the Escape key.
But Application.OnKey does not work for other keys.

Is there any way to allow my animation macro to respond to presses of
other keys besides Escape?

I might point out that I have successfully worked out using mouse
movements to control the animation stream. If the mouse isn't moving,
the animation plays normally. If the mouse is moved to the right(or
left) the animation plays forward (or backward) as long as the mouse
keeps moving. Otherwise it starts to play normally again. I'm using
the API call GetCursorPos to do this. This is pretty cool. At least

to
me.

Anyway, responding to some other keystrokes would be nice. I hope it
can be done without diving into classes and events, which I suppose is
possible since the animation is being done with a single excel chart.

Thanks,

Brian Murphy
Austin, Texas



Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Macro to fire upon opening file David P. Excel Discussion (Misc queries) 3 June 26th 08 09:12 PM
Fire Macro from Cell Change Slashman Excel Worksheet Functions 7 October 17th 06 04:08 AM
Onkey vs Macro Short cut key rgarber50 Excel Discussion (Misc queries) 1 July 10th 05 07:34 PM
Macro fire at given time, through command prompt Tim Excel Programming 1 August 19th 04 04:33 PM
Worksheet_Change event won't fire to execute Macro??? jpdill5 Excel Programming 2 February 13th 04 02:34 PM


All times are GMT +1. The time now is 09:35 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"