Ahi te arme una funcion que verifica cada caracter (ascii) ingresado si corresponde a un numero (agrego el punto decimal y la tecla backspace)
En vez de usar change, usas KeyPress para verificar cada ascii... Si no es un numero aparece el mensaje de alerta, y elimina ese keypress
Código:
Public Function EsNumero(KeyAscii As Integer) As Boolean
'Agrego el "." decimal (lo podes cambiar por "," si usas ese...
'Y agrego el Ascii "8" que es la tecla BORRAR
Select Case KeyAscii
Case Asc("0"), Asc("1"), Asc("2"), Asc("3"), Asc("4"), Asc("5"), Asc("6") & _
Asc("7"), Asc("8"), Asc("9"), Asc("."), 8
EsNumero = True
Case Else
EsNumero = False
End Select
End Function
Private Sub Text1_KeyPress(KeyAscii As Integer)
If EsNumero(KeyAscii) = False Then
MsgBox "Este es el mensaje de alerta", vbCritical
KeyAscii = 0 'no escribo el caracter
End If
End Sub