Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5456|回复: 19

[已解决]大量日期格式检查,代码怎样用一个函数代替

[复制链接]
发表于 2013-6-24 15:35 | 显示全部楼层 |阅读模式
1、多个文本框,textbox1、textbox8、textbox98,名称不是连续的,目前每一个文本框的离开事件下面都是很长的代码,能否改成一个代码,每个事件后面去执行这个代码就可以了,小弟初学,请各位代为修改。
2、一个是检查日期的,一个检查身份证号码的,麻烦各位了
最佳答案
2013-6-24 16:18
  1. Function CheckDate(strText As String) As Boolean
  2.     Dim objText As MSForms.TextBox
  3.     Set objText = Me.Controls(strText)
  4.     With objText
  5.         If .Text = "" Or .Text = "长期" Then Exit Function
  6.         If Not IsDate(Format(.Text, "####-##-##")) Then   '检查日期格式
  7.             CheckDate = True
  8.             MsgBox "输入格式有误"
  9.             .Text = ""
  10.             .SetFocus
  11.         Else
  12.             If DateDiff("d", Format(.Text, "####-##-##"), Date) > 0 Then
  13.                 CheckDate = True
  14.                 MsgBox "证件已过期,请更新"
  15.                 .Text = ""
  16.                 .SetFocus
  17.             End If
  18.         End If
  19.     End With
  20. End Function
复制代码

BOOK1.rar

12.25 KB, 下载次数: 24

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-6-24 15:46 | 显示全部楼层
把判断写成一个函数,传递控件的名字做为参数。
回复

使用道具 举报

发表于 2013-6-24 15:46 | 显示全部楼层
回复

使用道具 举报

发表于 2013-6-24 15:57 | 显示全部楼层
貌似用类模块的方法,EXIT事件不支持。

回复

使用道具 举报

 楼主| 发表于 2013-6-24 16:13 | 显示全部楼层
可惜我不会啊,各位老师给做一个学习一下吧
回复

使用道具 举报

 楼主| 发表于 2013-6-24 16:14 | 显示全部楼层
我做的函数可以检查,但是不能清空和定位单元格
回复

使用道具 举报

发表于 2013-6-24 16:18 | 显示全部楼层    本楼为最佳答案   
  1. Function CheckDate(strText As String) As Boolean
  2.     Dim objText As MSForms.TextBox
  3.     Set objText = Me.Controls(strText)
  4.     With objText
  5.         If .Text = "" Or .Text = "长期" Then Exit Function
  6.         If Not IsDate(Format(.Text, "####-##-##")) Then   '检查日期格式
  7.             CheckDate = True
  8.             MsgBox "输入格式有误"
  9.             .Text = ""
  10.             .SetFocus
  11.         Else
  12.             If DateDiff("d", Format(.Text, "####-##-##"), Date) > 0 Then
  13.                 CheckDate = True
  14.                 MsgBox "证件已过期,请更新"
  15.                 .Text = ""
  16.                 .SetFocus
  17.             End If
  18.         End If
  19.     End With
  20. End Function
复制代码
回复

使用道具 举报

发表于 2013-6-24 16:18 | 显示全部楼层
  1. Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)    '退出文本框事件
  2.     Cancel = CheckDate(Me.ActiveControl.Name)
  3. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-6-25 09:06 | 显示全部楼层
hwc2ycy 发表于 2013-6-24 16:18

非常感谢您的解答,还有一个疑问

这段代码 Set objText = Me.Controls(strText)

为什么用到我的表里面就会提示"类型不匹配"呢?会是哪里出现了问题呢?
回复

使用道具 举报

发表于 2013-6-25 09:07 | 显示全部楼层
这个代码是在窗体模块里用的。
别的地方不行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 05:36 , Processed in 0.577825 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表