il mio metodo è più complicato ma frega anche i cut & paste

Private Sub txtImporto_Change()

Dim a As Integer
Dim Cifra As String
Cifra = txtImporto.Text
Posizione = txtImporto.SelStart
a = Posizione
ciccio = ControlloNumerico(Cifra, 999, 2, a)
If ciccio = -1 Then
Cifra = delete(Cifra, a)
txtImporto.Text = Cifra
txtImporto.SelStart = Posizione

ElseIf ciccio = 1 Then
Cifra = delete(Cifra, a)
txtImporto.Text = Cifra
txtImporto.SelStart = Posizione

ElseIf ciccio = 2 Then
Cifra = delete(Cifra, a)
txtImporto.Text = Cifra
txtImporto.SelStart = Posizione


End If

Function ControlloNumerico(Stringa As String, MaxInteri As Integer, _
MaxDecimali As Integer, Posizione As Integer) As Integer
'risultato -1 errore generico inseriti caratteri non conformi
'risultato 0 ok
'risultato 1 errore superato maxinteri
'risultato 2 errore superato maxdecimali

controllo = 0
For Posizione = 1 To Len(Stringa)
aaa = Mid(Stringa, Posizione, 1)
ascii = Asc(aaa)
If ascii > 46 And ascii < 58 Or ascii = 44 Or ascii = 46 Then
Posizione = Posizione
Else
controllo = -1
ControlloNumerico = controllo
Exit Function
End If
Next
posizionevirgola = InStr(Stringa, ",")

partedecimale = Mid(Stringa, posizionevirgola + 1)
If posizionevirgola > 0 Then
parteintera = Mid(Stringa, 1, Len(Stringa) - (Len(partedecimale) + 1))
If Len(parteintera) = 0 Then
controllo = -1
ControlloNumerico = controllo
Exit Function
End If
End If
If Len(Stringa) = 0 Then
controllo = 1
ControlloNumerico = controllo
Exit Function
End If
If posizionevirgola > 1 Then
If Len(parteintera) > MaxInteri Then
controllo = 1
ControlloNumerico = controllo
Exit Function
End If
If Len(parteintera) = 0 Then
controllo = 1
ControlloNumerico = controllo
Exit Function
End If
If Len(partedecimale) > MaxDecimali Then
controllo = 2
ControlloNumerico = controllo
Exit Function
End If
End If
ControlloNumerico = controllo
End Function
Function delete(Stringa As String, Posizione As Integer) As String
' questa funzione cancella un carattere
If Posizione = 0 Then
del = ""
delete = del
Exit Function
End If
If Len(Stringa) = 0 Then
del = ""
delete = del
Exit Function
End If
lunghezza = Len(Stringa)
If Posizione = lunghezza Then
ccc = Mid(Stringa, 1, lunghezza - 1)
del = ccc
delete = del
Exit Function
End If
If Posizione < lunghezza Then
ccc = Mid(Stringa, 1, Posizione - 1)
vvv = Mid(Stringa, Posizione + 1)
del = ccc + vvv
delete = del
Exit Function
End If
If Posizione > lunghezza Then
del = -1
delete = del
Exit Function
End If
delete = del
End Function