Excel:验证数据不会强制用户输入“日期格式化”数据

时间:2015-02-02 09:38:10

标签: excel validation date

我在Excel数据验证方面遇到了问题,因为它不会强迫用户在单元格中输入日期类型的数据。 我正在创建一个表单,允许从多个纸质表单中输入数据。

问题是,如果用户输入" 41000"在日期单元格中,它接受的数据是自1/1/1901以来的天数(不知道它是否是绝对的,它是我的验证条件)。

我想知道是否有解决方案阻止用户输入XX / XX / XXXX日期以外的任何内容。

非常感谢。

SV

1 个答案:

答案 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

宏的作用类似于数据验证。它测试一些常见错误并拒绝它们。

因为它是工作表代码,所以很容易安装和自动使用:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. 选择查看代码 - 这会打开一个VBE窗口
  3. 粘贴内容并关闭VBE窗口
  4. 如果您有任何疑虑,请先在试用工作表上试用。

    如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是 .xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要了解有关宏的更多信息,请参阅:

      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

      必须启用宏才能使其生效!