You can speed it up pretty well by using DoEvents only when it is needed. You can use the GetInputState API function for this.

VB Code:
  1. Private Declare Function GetInputState Lib "user32" Alias "GetInputState" () As Long
  2.  
  3. Do
  4.     DoSomething
  5.     If GetInputState Then DoEvents
  6. Loop Until Condition = True

There is another (better) API function to use, but I forgot what it is. Hopefully someone remembers and will post it.