Podrías usar la API de Windows...
Código:
'Ejemplo basado en documentación de API-Guide http://www.allapi.net/
'A nivel de módulo pon el siguiente código
Const GWL_STYLE = &HFFFFFFF0
Const ES_NUMBER = &H2000&
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Sub SetNumeric(ByRef NumberText As TextBox)
Dim lEstiloAct As Long
'Obtienes el estilo de la ventana (en este caso cuadro de texto)
lEstiloAct = GetWindowLong(NumberText.hwnd, GWL_STYLE)
'Modificas el estilo actual asignándole el flag de estilo Solo-Numérico
lEstiloAct = lEstiloAct Or ES_NUMBER
'Asignar al cuadro de texto el nuevo estilo
SetWindowLong NumberText.hwnd, GWL_STYLE, lEstiloAct
'Actualizas para que tome el cambio
NumberText.Refresh
End Sub
Puesto que parece que el campo siempre habrá de recibir números, la anterior función es adecuada. Si quisieras que el campo en algún momento volviera a tomar caracteres alfabéticos, habría que anular el flag, y es sólo una modificación sencilla.
Cuando quieras que algún campo de texto deje de recibir caracteres alfabéticos, simplemente llamas a la función así:
Código:
'Text1 es un campo de texto
SetNumeric Text1
Y no tienes que volver a preocuparte por las letras en tu campo...
Espero que te sirva.
Saludos.