Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I want to create a loop so the program will look for the actual keyboard
input (not a program sendkey nor the virtual key) , say "arrow_down" key, and when it sees the change, it does something else. Here is my loop: Dim keystat(0 To 255) As Byte While keystat(40) < 1 ' keystat(40) is arrow down key ' Check if the arrow down key has been pressed ' This is where I could not see the change. Need some interrupt loop to ' enter keyboard such as input (but I don't want to see it shows on the screen) retval = GetKeyboardState(keystat(0)) Wend Thanks, Bau |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() there is a key press event. Below is the code from the VBA help topic for key press event. Private Sub TextBox1_KeyPress(ByVal KeyAscii As _ MSForms.ReturnInteger) TextBox2.Text = TextBox2.Text & Chr(KeyAscii) 'To handle keyboard combinations (using SHIFT, 'CONTROL, OPTION, COMMAND, and another key), 'or TAB or ENTER, use the KeyDown or KeyUp event. End Sub Private Sub UserForm_Initialize() Move 0, 0, 570, 380 TextBox1.Move 30, 40, 220, 160 TextBox1.MultiLine = True TextBox1.WordWrap = True TextBox1.Text = "Type text here." TextBox1.EnterKeyBehavior = True TextBox2.Move 298, 40, 220, 160 TextBox2.MultiLine = True TextBox2.WordWrap = True TextBox2.Text = "Typed text copied here." TextBox2.Locked = True End Sub -- joel ------------------------------------------------------------------------ joel's Profile: 229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=171938 Microsoft Office Help |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() Use GetAsyncKeyState instead of GetKeyboardState and toss in a DoEvents at the top of the loop. E.g, Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Sub AAA() Dim B(0 To 255) As Byte Dim N As Integer Do Until False DoEvents N = GetAsyncKeyState(vbKeyDown) If N = 0 Then Range("A1").Value = "up" Else Range("A1").Value = "down" End If Loop End Sub Cordially, Chip Pearson Microsoft MVP 1998 - 2010 Pearson Software Consulting, LLC www.cpearson.com [email on web site] On Wed, 20 Jan 2010 14:44:02 -0800, bau wrote: I want to create a loop so the program will look for the actual keyboard input (not a program sendkey nor the virtual key) , say "arrow_down" key, and when it sees the change, it does something else. Here is my loop: Dim keystat(0 To 255) As Byte While keystat(40) < 1 ' keystat(40) is arrow down key ' Check if the arrow down key has been pressed ' This is where I could not see the change. Need some interrupt loop to ' enter keyboard such as input (but I don't want to see it shows on the screen) retval = GetKeyboardState(keystat(0)) Wend Thanks, Bau |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thank you very much. It works perfectly!
"Chip Pearson" wrote: Use GetAsyncKeyState instead of GetKeyboardState and toss in a DoEvents at the top of the loop. E.g, Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Sub AAA() Dim B(0 To 255) As Byte Dim N As Integer Do Until False DoEvents N = GetAsyncKeyState(vbKeyDown) If N = 0 Then Range("A1").Value = "up" Else Range("A1").Value = "down" End If Loop End Sub Cordially, Chip Pearson Microsoft MVP 1998 - 2010 Pearson Software Consulting, LLC www.cpearson.com [email on web site] On Wed, 20 Jan 2010 14:44:02 -0800, bau wrote: I want to create a loop so the program will look for the actual keyboard input (not a program sendkey nor the virtual key) , say "arrow_down" key, and when it sees the change, it does something else. Here is my loop: Dim keystat(0 To 255) As Byte While keystat(40) < 1 ' keystat(40) is arrow down key ' Check if the arrow down key has been pressed ' This is where I could not see the change. Need some interrupt loop to ' enter keyboard such as input (but I don't want to see it shows on the screen) retval = GetKeyboardState(keystat(0)) Wend Thanks, Bau . |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thank you very much. It works well.
Regards, Bau "Chip Pearson" wrote: Use GetAsyncKeyState instead of GetKeyboardState and toss in a DoEvents at the top of the loop. E.g, Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer Sub AAA() Dim B(0 To 255) As Byte Dim N As Integer Do Until False DoEvents N = GetAsyncKeyState(vbKeyDown) If N = 0 Then Range("A1").Value = "up" Else Range("A1").Value = "down" End If Loop End Sub Cordially, Chip Pearson Microsoft MVP 1998 - 2010 Pearson Software Consulting, LLC www.cpearson.com [email on web site] On Wed, 20 Jan 2010 14:44:02 -0800, bau wrote: I want to create a loop so the program will look for the actual keyboard input (not a program sendkey nor the virtual key) , say "arrow_down" key, and when it sees the change, it does something else. Here is my loop: Dim keystat(0 To 255) As Byte While keystat(40) < 1 ' keystat(40) is arrow down key ' Check if the arrow down key has been pressed ' This is where I could not see the change. Need some interrupt loop to ' enter keyboard such as input (but I don't want to see it shows on the screen) retval = GetKeyboardState(keystat(0)) Wend Thanks, Bau . |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Macro with interrupt for user input | Excel Programming | |||
How to interrupt code | Excel Programming | |||
Interrupt code | Excel Programming | |||
Interrupt While loop | Excel Programming | |||
QueryTables Interrupt if URL is Down | Excel Programming |