Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA比较给定日期和(给定日期-2个月)_Vba_Excel_Date - Fatal编程技术网

Excel VBA比较给定日期和(给定日期-2个月)

Excel VBA比较给定日期和(给定日期-2个月),vba,excel,date,Vba,Excel,Date,我正在编写代码,以确保系统的数据日期不晚于2个营业月的结束日期。例如,如果系统的作业运行日期为2015年12月23日,则有效数据日期为2015年10月30日和2015年11月30日。所涉及的日期仅为工作日 我有以下代码: If DateDiff("m", dataDate, jobRunDate) > 2 Then MsgBox "Error in dataDate" End If 但是,我不知道如何找到: 月的最后一天 计算2个工作月后 任何帮助都将不胜感激。谢谢 以下是如何获

我正在编写代码,以确保系统的数据日期不晚于2个营业月的结束日期。例如,如果系统的作业运行日期为2015年12月23日,则有效数据日期为2015年10月30日和2015年11月30日。所涉及的日期仅为工作日

我有以下代码:

If DateDiff("m", dataDate, jobRunDate) > 2 Then
    MsgBox "Error in dataDate"
End If
但是,我不知道如何找到:

  • 月的最后一天
  • 计算2个工作月后

  • 任何帮助都将不胜感激。谢谢

    以下是如何获得一个月的最后一天:

    Sub LastDayOfMonth()
        Dim d As Date
        mnth = 12
        yr = 2015
        d = DateSerial(yr, mnth + 1, 0)
        MsgBox d
    End Sub
    

    然后必须从该日期减去两个月。如果结果是星期六或星期天,您必须决定是继续到下一个星期一还是回到上一个星期五。

    以下是如何获得一个月的最后一天:

    Sub LastDayOfMonth()
        Dim d As Date
        mnth = 12
        yr = 2015
        d = DateSerial(yr, mnth + 1, 0)
        MsgBox d
    End Sub
    

    然后必须从该日期减去两个月。如果结果是星期六或星期日,您必须决定是要前进到下一个星期一还是后退到上一个星期五。

    要查找一个月的最后一天,您可以查找下一个月的第一天并减去一天:

    Dim last As Date
    Dim current As Date
    
    current = Now
    last = DateSerial(Year(current), Month(current), 1) - 1
    Debug.Print last
    
    要获得一个月的最后一个工作日,只需减去天数,直到它落在工作日:

    Do While Weekday(last, vbMonday) > 5
        last = last - 1
    Loop
    Debug.Print last
    
    将这两个想法结合起来,并将其提取为一个函数,可以得到以下结果:

    Private Sub Example()
    
        Debug.Print LastBizDayOfMonth(Year(Now), Month(Now) - 1)
        Debug.Print LastBizDayOfMonth(Year(Now), Month(Now) - 2)
    
    End Sub
    
    Private Function LastBizDayOfMonth(inYear As Integer, inMonth As Integer) As Date
        LastBizDayOfMonth = DateSerial(inYear, inMonth + 1, 1) - 1
        Do While Weekday(LastBizDayOfMonth, vbMonday) > 5
            LastBizDayOfMonth = LastBizDayOfMonth - 1
        Loop
    End Function
    

    要查找一个月的最后一天,可以查找下个月的第一天并减去一天:

    Dim last As Date
    Dim current As Date
    
    current = Now
    last = DateSerial(Year(current), Month(current), 1) - 1
    Debug.Print last
    
    要获得一个月的最后一个工作日,只需减去天数,直到它落在工作日:

    Do While Weekday(last, vbMonday) > 5
        last = last - 1
    Loop
    Debug.Print last
    
    将这两个想法结合起来,并将其提取为一个函数,可以得到以下结果:

    Private Sub Example()
    
        Debug.Print LastBizDayOfMonth(Year(Now), Month(Now) - 1)
        Debug.Print LastBizDayOfMonth(Year(Now), Month(Now) - 2)
    
    End Sub
    
    Private Function LastBizDayOfMonth(inYear As Integer, inMonth As Integer) As Date
        LastBizDayOfMonth = DateSerial(inYear, inMonth + 1, 1) - 1
        Do While Weekday(LastBizDayOfMonth, vbMonday) > 5
            LastBizDayOfMonth = LastBizDayOfMonth - 1
        Loop
    End Function
    

    什么是“营业月”?一个月的营业日,基本上是星期一到星期五。什么是“营业月”?一个月的营业日,基本上是星期一到星期五。。