作者:绿色风
分类:
时间:2022-08-17
浏览:109
楼主 liuguansky |
Q:1、在控制的范围Q5:R65536中,只能输3~4位数字,输入數字的位數不對或非數字格式的數據时,彈出報錯: 弹窗内容如下: 输入提示:只能输3~4位数字,如:08:30,可输入830或0830【24点正,則视作0点,即输入“000”】
点击弹窗上的确定按钮后,清除刚刚输入的错误值,并返回当前单元格。
A:用如下工作表事件代码可以实现:
- Private Sub Worksheet_Change(ByVal Target As Range)
- If Target.Cells.Count = 1 Then
- If Not Application.Intersect([q5:r65536], Target) Is Nothing Then '若在指定区域内,则处理
- If VBA.IsNumeric(Target.Value) And _
- (Len(CStr(Target.Value)) = 3 Or Len(CStr(Target.Value)) = 4) Then '若为数字,且为3/4位
- Application.EnableEvents = False '关闭事件激活,防止更改重新激活
- If Right(CStr(Target.Value), 2) * 1 > 59 Or Target.Value * 1 > 2359 Then '若非正常时间格式数字,进行提示,清除,并选定
- If MsgBox("超出时间限定", vbOKOnly) = vbOK Then
- Application.EnableEvents = False
- Target.ClearContents
- Target.Select
- Application.EnableEvents = True
- End If
- Else
- Target = Format(Target.Value, "#:00") & ":00" '若为正常格式,则调整格式
- End If
- Application.EnableEvents = True
- Else: '若输入格式有误,进行提示,清除,并选定
- If MsgBox("至少输3位数:" & vbCrLf & "如:08:30" & vbCrLf & _
- "可输入830或0830" & vbCrLf & "【只输二位时,无效/作为常规数据】" & _
- vbCrLf & "【24点正,应视作0点/输入“000”】", vbOKOnly, "输入提示:") = vbOK Then
- Application.EnableEvents = False
- Target.ClearContents
- Target.Select
- Application.EnableEvents = True
- End If
- End If
- End If
- End If
- 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总版主之一