Advertisement

【Excel VBA】检查日期输入校验函数

阅读量:

纲举目张

  • 说明
  • 代码code
  • 使用说明
  • 另外说明

说明

在之前的博文中讲述了身份证号校验功能函数银行卡信用卡卡号校验功能函数,主要用于检查身份证号和银行卡信用卡卡号录入是否正确,这里再为大家介绍一下用于检查日期录入是否正确的函数。

代码code

复制代码
    Sub 检查日期录入()
      Dim strDate As String
      strDate = "20210431"
      
      Dim bolCheck As Boolean
      bolCheck = CheckDate(strDate)
    End Sub
    
    Function CheckDate(DateString As String) As Boolean
      CheckDate = False '首先为函数设定False的结果,具体返回结果会根据后续的执行情况而定
      If Len(DateString) <> 8 Then
    '如果传入参数的长度不是8,则返回False
    CheckDate = False
    Exit Function
      End If
    
      Dim yyyy As Integer
    yyyy = Val(Left(DateString, 4)) '获取年份
      Dim mm As Integer
    mm = Val(Mid(DateString, 5, 2)) '获取月份
      Dim dd As Integer
    dd = Val(Right(DateString, 2)) '获取日
      If mm > 0 And mm < 13 Then
    If dd > 0 Then
      Select Case mm
        Case 2
          If (yyyy Mod 4) <> 0 Or (yyyy Mod 100) = 0 And (yyyy Mod 400) <> 0 Then
            '如果不是闰年的情形
            If dd < 29 Then
              CheckDate = True
              Exit Function
            Else
              CheckDate = False
              Exit Function
            End If
          End If
          '如果是闰年
          If dd < 30 Then
            CheckDate = True
            Exit Function
          Else
            CheckDate = False
            Exit Function
          End If
        Case 4, 6, 9, 11
          If dd < 31 Then
            CheckDate = True
            Exit Function
          Else
            CheckDate = False
            Exit Function
          End If
        Case Else
          If dd < 32 Then
            CheckDate = True
            Exit Function
          Else
            CheckDate = False
            Exit Function
          End If
      End Select
    End If
      End If
    End Function

使用说明

sub 是主入口,设置好要检查的日期字符串,然后将要检查的日期字符串作为参数传入CheckDate函数,如果日期符合正常日期则返回True,否则返回False。当然本例中传入的日期字符串“20210431”返回的结果则是False。

另外说明

其实在VBA中检查日期是否正确是有函数的,那就是IsDate,使用起来也很简单,具体见IsDate 函数
既然VBA自带了检查日期函数,我们又为什么费力的造轮子呢?其实最开始我在使用VBA的时候并没有找到这个函数,所以才费力的编写了该轮子。但是通过自己的编写和不断调试、测试,更加深入的了解了VBA,利用现有的常用函数也可以写出实现复杂功能的函数,亲自将闰年的计算变成了VBA的算法,打破了对算法的恐惧,成就感满满的!

全部评论 (0)

还没有任何评论哟~