View Single Post
  #6   Report Post  
Posted to microsoft.public.excel.programming
Geoff Martin Geoff Martin is offline
external usenet poster
 
Posts: 12
Default Why does sendkeys seem to loop

Got this from www.VisualBasicForum.com in response to my question. Thanks to
Herilane from London, England. Seems to work to fit my needs AND takes care
of the looping regardless of where the cursor insertion point is.

Thanks to everyone who had suggestions,
Geoff

Sendkeys simulates key presses, so the event triggers itself, which puts you
in a loop.
There's no Application.EnableEvents equivalent for userforms, so you'll have
to create one yourself - like this, for example:


VB:
----------------------------------------------------------------------------
----
Public RunEvents As Boolean

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)
If KeyCode = 32 And Shift = 2 And RunEvents = True Then
RunEvents = False
SendKeys " "
DoEvents
RunEvents = True
End If
End Sub

Private Sub UserForm_Initialize()
RunEvents = True
End Sub
----------------------------------------------------------------------------
----


I'm not entirely sure why the DoEvents is necessary, but it seems to be, to
make things happen in the proper order so to say.

__________________
Please use the [vb] and [/vb] tags.

"Geoff Martin" wrote in message
...
When a user types the space bar, I want 1 space, but if they type
<Ctrl+space I want to insert 5 spaces where the cursor is in the text box
(sort of simulating a tab, but I want to keep the tab key for moving focus
from this control to the next).

If the message box line is commented out, spaces keep getting added in

what
seems like an endless loop. If the message box line us uncommented and
allowed to execute, then 5 spaces are added along with the original space
making a total of 6 (1 space too many). If I change the keycode = 32 to
keycode = 188 (a comma, I think) then the correct number of spaces is

added
and there is no ",".

How can I fix this?
Thanks,
Geoff

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)
If KeyCode = 32 And Shift = 2 Then
'MsgBox "Both the <ctrl key and <spc key were pressed"
SendKeys " ", False 'inserts 5 spaces
End If
End Sub