若是限制只输入数字或字母可以在keypress事件中限制。
但你的情况不是,我觉得你可以在lostfocuse事件中进行判断,不在范围的话清空文本框。

解决方案 »

  1.   

    字符串和日期的处理可以做一个类似OnlyInputDecimal的方法,然后在Text1_Validate做相应的判断
    Private Sub OnlyInputDecimal(KeyAscii As Integer)
        If Chr(KeyAscii) Like "[0-9]" _
            Or Chr(KeyAscii) Like "[.]" _
            Or KeyAscii = vbKeyBack Then
        
        Else
            KeyAscii = 0
        End If
    End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)
        Call OnlyInputDecimal(KeyAscii)
    End SubPrivate Sub Text1_Validate(Cancel As Boolean)
        On Error Resume Next
        If Text1.Text = "" _
            Or CInt(Text1.Text) < 0.0001 _
            Or CInt(Text1.Text) > 10000 Then
            Cancel = True
        End If
    End Sub
      

  2.   

    如楼上所说。也可以在exit事件中判断。
    不过,为什么不使用掩码编辑框?
      

  3.   

    keypresslostfocus 事件中判断
      

  4.   

    如果判断数据不合法就不迁移焦点,在lostfocus 事件里进行判断容易出现死循环的现象:如果你有两个Text框的内容不合法,从一Text框里迁移到另一个Text框,由于数据都不合法,两个Text框都要获得焦点,就出现死循环了。
    通常做法是一个框设定一个标志,只要有一个Text框数据不合法,迁移到的控件就不做自己数据的合法性检测了,如果界面上有10来个这样的框的话,那就更麻烦了
    在Validate事件里就能够很好的解决这个问题。
      

  5.   

    应该把 CInt 改成 CDec
    Private Sub Text1_Validate(Cancel As Boolean)
        On Error Resume Next
        If Text1.Text = "" _
            Or CDec(Text1.Text) < 0.0001 _
            Or CDec(Text1.Text) > 10000 Then
            Cancel = True
        End If
    End Sub