I built a little function: function CashVal (byRef Intext as object, byRef ErrInd as boolean) as double 1. Check Intext to be sure it's not nothing 2. Check Intext to be sure it's not null 3. Check Intext to be sure it's numeric (and in my case, > 0...) 4. Return CDbl(Intext) and an appropriate ErrInd. I invoke this (x = CashVal(textboxname.text,Error_Indicator) )when the "leave" event is fired, so the user can type anything, and it's evaluated as a whole. The event handler checks to see if there was an error. If not, it sets the text property of the text box to format (x, "currency"). If there's an error, obviously, it can react appropriately.