ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何限定指定区域只能输入3或4位正确的时间格式数字?

如何限定指定区域只能输入3或4位正确的时间格式数字?

作者:绿色风 分类: 时间:2022-08-17 浏览:109
楼主
liuguansky
Q:1、在控制的范围Q5:R65536中,只能输3~4位数字输入數字的位數不對或非數字格式的數據时,彈出報錯
     弹窗内容如下:
  • 输入提示:
  • 只能输3~4位数字,如:08:30,可输入830或0830
  • 【24点正,則视作0点,即输入“000”】

    点击弹窗上的确定按钮后,清除刚刚输入的错误值,并返回当前单元格。

    A:用如下工作表事件代码可以实现:

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2.     If Target.Cells.Count = 1 Then
    3.         If Not Application.Intersect([q5:r65536], Target) Is Nothing Then '若在指定区域内,则处理
    4.             If VBA.IsNumeric(Target.Value) And _
    5.                 (Len(CStr(Target.Value)) = 3 Or Len(CStr(Target.Value)) = 4) Then '若为数字,且为3/4位
    6.                 Application.EnableEvents = False '关闭事件激活,防止更改重新激活
    7.                 If Right(CStr(Target.Value), 2) * 1 > 59 Or Target.Value * 1 > 2359 Then '若非正常时间格式数字,进行提示,清除,并选定
    8.                     If MsgBox("超出时间限定", vbOKOnly) = vbOK Then
    9.                         Application.EnableEvents = False
    10.                         Target.ClearContents
    11.                         Target.Select
    12.                         Application.EnableEvents = True
    13.                     End If
    14.                     Else
    15.                     Target = Format(Target.Value, "#:00") & ":00" '若为正常格式,则调整格式
    16.                 End If
    17.                 Application.EnableEvents = True
    18.                 Else: '若输入格式有误,进行提示,清除,并选定
    19.                 If MsgBox("至少输3位数:" & vbCrLf & "如:08:30" & vbCrLf & _
    20.                     "可输入830或0830" & vbCrLf & "【只输二位时,无效/作为常规数据】" & _
    21.                         vbCrLf & "【24点正,应视作0点/输入“000”】", vbOKOnly, "输入提示:") = vbOK Then
    22.                         Application.EnableEvents = False
    23.                         Target.ClearContents
    24.                         Target.Select
    25.                         Application.EnableEvents = True
    26.                 End If
    27.             End If
    28.         End If
    29.     End If
    30. End Sub




  • 2楼
    opelwang
    叶版,一楼的代码还有一点需要改善。
    如果时间在24:00~24:59这个范围,无法输入。
    3楼
    liuguansky
    24:00都成0了嘛,为什么超过还可以输入呢.
    4楼
    opelwang
    呵呵,叶版~~~
    如果是凌晨零点凌晨壹点这个范围内,你试试,如何正确输入?
    5楼
    liuguansky
    000
    0000
    001
    002
    都可以吧.
    6楼
    opelwang
    难道是**作有误?看看动画,请叶版指点....0.gif
     
    7楼
    liuguansky


    要输入文本的'001,因为你的单元格格式是日期格式的.

    免责声明

    有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
    ------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

    评论列表
    sitemap