For your first question, show us the code you currently have as we can amend it for you to remove the problems (far easier than writing it from scratch!).

For the second question I would suggest using a different textbox for those columns, which does the formatting in the change event. Bear in mind tho that people may want to input the : characters themselves.

Here is some possible code:
VB Code:
  1. 'dont let the event fire when we are changing the value (infinite loop!)
  2. Static bSelfChanging as Boolean
  3.   If bSelfChanging Then Exit Sub
  4.   bSelfChanging = True
  5.  
  6. Dim sTime as String
  7. Dim iCursorpos as Integer
  8. 'get current value (& cursor pos)
  9.   iCursorpos = txtTimeInput.SelStart
  10.   sTime = Replace(txtTimeInput.Text,":","")
  11.  
  12. 'format
  13.   sTime = Format$(sTime,"#####:#0:00")
  14.   If Left$(sTime,1) = ":" Then sTime = Mid$(sTime,2)
  15.  
  16. 'set value (& return cursor pos)
  17.   txtTimeInput.Text = sTime
  18.   txtTimeInput.SelStart = iCursorpos
  19.  
  20.   bSelfChanging = False