我的处理方法是,不禁用粘贴,但把粘贴后的数据中的非数字全部给干掉。
Private Sub Text1_Change()
Dim i As Long, o As Long 'i 是循环变量,o 是中间变量
Dim xs As Boolean '小数点存在
Dim s1 As String '原始数据
Dim s2 As String '新数据
Dim l As Long '光标位置
l = Text1.SelStart '取光标位置
s1 = Text1.Text '取原始数据
For i = 1 To Len(s1) '循环
o = Asc(Mid(s1, i, 1)) '取一位
If o = 46 Then '小数点
If xs Then '存在
o = 0 '取消
Else
xs = True '保存已存在小数点
End If
ElseIf o < 48 Or o > 57 Then '非数字
o = 0 '取消
End If
If o > 0 Then '非取消
s2 = s2 & Chr(o) '生成结果
End If
Next i
If s1 <> s2 Then '如果过滤后的数据有变化
Text1.Text = s2 '此处会造成再次触发本事件。
Text1.SelStart = l - 1 '恢复光标位置
End If
End Sub