Excel精英培训网

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

[已解决]如何用vba限定单元格输入日期格式

[复制链接]
发表于 2012-3-30 07:27 | 显示全部楼层 |阅读模式
本帖最后由 黄花菜 于 2012-3-31 07:26 编辑

工作表C列为出生年月,请教如何用VBA限定该列只能输入xxxx-xx-xx的日期格式,如不对,则提示并清除,谢谢
最佳答案
2012-3-30 16:13
本帖最后由 zjdh 于 2012-3-30 16:15 编辑
黄花菜 发表于 2012-3-30 09:19
谢谢指点,但是我试验下来如果输入abc,不报错是什么原因


这个问题没考虑,修改一下:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 3 And Target.Count <> 1 Then Exit Sub
    If Target.Value <> Format(Target, "YYYY-MM-DD") Or Not IsDate(Target.Value)  Then
        Application.EnableEvents = False
        MsgBox "请按照“YYYY-MM-DD”格式输入年月日!"
        Target = ""
        Application.EnableEvents = True
    End If
End Sub
年月日输入格式.rar (6.56 KB, 下载次数: 234)

评分

参与人数 1 +9 收起 理由
1091126096 + 9

查看全部评分

发表于 2012-3-30 08:17 | 显示全部楼层
本帖最后由 zjdh 于 2012-3-30 16:17 编辑

年月日输入格式.rar (6.56 KB, 下载次数: 82)
回复

使用道具 举报

发表于 2012-3-30 08:58 | 显示全部楼层
  1. Sub Macro1()
  2.     Columns("C:C").Select
  3.     Selection.NumberFormatLocal = "yyyy-m-d"
  4. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-3-30 09:19 | 显示全部楼层
zjdh 发表于 2012-3-30 08:17

谢谢指点,但是我试验下来如果输入abc,不报错是什么原因
回复

使用道具 举报

发表于 2012-3-30 09:37 | 显示全部楼层
本帖最后由 1091126096 于 2012-3-30 09:52 编辑


  1. Sub Macro1()
  2.   Range("C2:C10000").Select
  3.     Selection.NumberFormatLocal = "yyyy-m-d"
  4.     With Selection.Validation
  5.         .Delete
  6.         .Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, Operator:= _
  7.         xlBetween, Formula1:="1/1/1980", Formula2:="12/31/2100"
  8.         .IgnoreBlank = True
  9.         .InCellDropdown = True
  10.         .InputTitle = ""
  11.         .ErrorTitle = "出错了"
  12.         .InputMessage = ""
  13.         .ErrorMessage = "日期格式不对"
  14.         .IMEMode = xlIMEModeNoControl
  15.         .ShowInput = True
  16.         .ShowError = True
  17.     End With
  18. End Sub
复制代码

Book2 .zip

52.2 KB, 下载次数: 90

评分

参与人数 1 +3 收起 理由
黄花菜 + 3 谢谢指点!

查看全部评分

回复

使用道具 举报

发表于 2012-3-30 16:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2012-3-30 16:15 编辑
黄花菜 发表于 2012-3-30 09:19
谢谢指点,但是我试验下来如果输入abc,不报错是什么原因


这个问题没考虑,修改一下:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 3 And Target.Count <> 1 Then Exit Sub
    If Target.Value <> Format(Target, "YYYY-MM-DD") Or Not IsDate(Target.Value)  Then
        Application.EnableEvents = False
        MsgBox "请按照“YYYY-MM-DD”格式输入年月日!"
        Target = ""
        Application.EnableEvents = True
    End If
End Sub
年月日输入格式.rar (6.56 KB, 下载次数: 234)
回复

使用道具 举报

匿名  发表于 2015-1-1 11:16
zjdh 发表于 2012-3-30 08:17

看这个不太懂,您能够把原理介绍一下么
回复

使用道具

发表于 2015-1-1 22:46 | 显示全部楼层
感觉3楼的办法更好呀
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:40 , Processed in 0.371578 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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