Link to home
Start Free TrialLog in
Avatar of David Spigelman
David SpigelmanFlag for United States of America

asked on

Quickbooks-style date increments/decrements?

I'd like to setup a date field in an Access form, that can be incremented or decremented by pressing the + or - key, respectively, the way it works in Quickbooks. I thought that I could capture the keypress before saving the field, and do the job that way, by using code like this in the OnKeypress event:


Private Sub RequestDate_KeyPress(KeyAscii As Integer)
   Select Case KeyAscii
      Case 43
         RequestDate = RequestDate + 1
      Case 45
         RequestDate = RequestDate - 1
   End Select
End Sub

This seems to work, except that it still types a "+" or a "-" into the box. In fact, if the field value is highlighted, it erases the existing value to do it, although if I hit Esc afterwards, I can see that  the new, correct value, is in place.

How do I get it to just update the field with the new date value, and not insert a + or - into it?
ASKER CERTIFIED SOLUTION
Avatar of DatabaseMX (Joe Anderson - Former Microsoft Access MVP)
DatabaseMX (Joe Anderson - Former Microsoft Access MVP)
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of David Spigelman

ASKER

That did it, mx. Actually, all that I was missing was setting KeyAscii = 0. That worked perfectly. Just curious, 187 and 189 seem to be drawing characters. Why were you using those?

Anyway, thanks a bunch!
Thanks again!
"Why were you using those?"
Well, I thought ... those were the keycodes for plus and minus ... and they do work ... but, the keycodes are actually 43 and 45.  I quickly used Debug.Print Keycode ... and those were returned.

Not sure what is going on ...

mx
Ok - that's kind of what I figured, but I thought I would ask. I could have been missing something.
Actually, not sure WHAT ... is going on with those code.  Forget KeyDown ... what you came up with is correct ... just missing KeyAscii = 0

Private Sub RequestDate_KeyPress(KeyAscii As Integer)
   Debug.Print KeyAscii
   Select Case KeyAscii
      Case 43
         KeyAscii = 0
         RequestDate = CDate(RequestDate) + 1
      Case 45
         KeyAscii = 0
         RequestDate = CDate(RequestDate - 1)
   End Select
End Sub

mx
Lol - Well, it works. Now - any thoughts on how to turn it into a general procedure or function, so I can use it all over the app? Getting a little confused over what I'd need to pass,