我在Excel数据验证方面遇到了问题,因为它不会强迫用户在单元格中输入日期类型的数据。 我正在创建一个表单,允许从多个纸质表单中输入数据。
问题是,如果用户输入" 41000"在日期单元格中,它接受的数据是自1/1/1901以来的天数(不知道它是否是绝对的,它是我的验证条件)。
我想知道是否有解决方案阻止用户输入XX / XX / XXXX日期以外的任何内容。
非常感谢。
SV
答案 0 :(得分:0)
这只是一个使用单元格 A1 至 A10。的示例。
您可以根据具体布局进行调整。
A1 至 A10 中的单元格必须先格式化为 文字。 然后安装以下 event 宏:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, r As Range, v As String, inty As Range
Dim d As Integer, m As Integer, y As Integer
Set rng = Range("A1:A10")
Set inty = Intersect(rng, Target)
If inty Is Nothing Then Exit Sub
On Error GoTo NotGood
For Each r In inty
v = r.Text
ary = Split(v, "/")
If UBound(ary) <> 2 Then GoTo NotGood
d = CInt(ary(0))
m = CInt(ary(1))
y = CInt(ary(2))
If y > 9999 Then GoTo NotGood
If y < 1900 Then GoTo NotGood
If m > 12 Then GoTo NotGood
If d > 31 Then GoTo NotGood
GoTo nxtr
NotGood:
MsgBox "bad input in cell " & r.Address(0, 0)
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
On Error GoTo 0
Exit Sub
nxtr:
Application.EnableEvents = False
r.ClearContents
r.NumberFormat = "dd/mm/yyyy"
r.Value = DateSerial(y, m, d)
Application.EnableEvents = True
Next r
End Sub
宏的作用类似于数据验证。它测试一些常见错误并拒绝它们。
因为它是工作表代码,所以很容易安装和自动使用:
如果您有任何疑虑,请先在试用工作表上试用。
如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是 .xlsx
删除宏:
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
要了解有关事件宏(工作表代码)的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/event.htm
必须启用宏才能使其生效!