【问题标题】:Exclude weekend days when adding to current date VBA添加到当前日期 VBA 时排除周末
【发布时间】:2018-04-28 15:53:42
【问题描述】:

我有以下一段代码,它排除了 Excel 表中日期与今天 + 6 天不同的所有结果。 问题是,当我在周一执行该操作时,我遇到了周日。 我需要以某种方式对其进行更改,除非结果是星期六或星期日,否则它总是会在我当前的日期上增加 6 天,然后我想在此之后的第一个工作日,即星期一。

    Public Sub GRP_SC_Filter1()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False


    Dim DelDate As Long


    DelDate = DateSerial(Year(Date), Month(Date), Day(Date) + 6)


    LR = Sheets("Goods Receivable Planning").Range("A" & Rows.Count).End(xlUp).Row
    Cells.AutoFilter Field:=13, Criteria1:="<>" & DelDate

    ALR = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    If ALR > 2 Then
        Range("A2:A" & LR).SpecialCells(xlCellTypeVisible).Select
        Range("A2:A" & LR).Delete
        Range("A1").Activate
    End If
    Cells.AutoFilter
 '  MsgBox "Finished deleting rows"
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

如果有人能帮我把它变成我需要的东西,我会非常感激。老实说,我被困住了。先感谢您!

【问题讨论】:

  • 您查看过=NetworkDays() 工作表功能吗?这将计算两个日期之间的工作日数,并可能帮助您实现所需。
  • 如果你的周末是Sat, Sun,你可以使用Excel函数WORKDAY。如果不是这样,请使用WORKDAY.INTL 来定义周末。两者都可以在 VBA 中作为 WorksheetFunction 对象的成员使用。

标签: excel vba date filter


【解决方案1】:

这个函数应该做你想做的:

Function GetNextWorkingDay(dt As Date) As Date
  Select Case Weekday(dt)
    Case 1
      GetNextWorkingDay = DateAdd("d", 1, dt)
    Case 7
      GetNextWorkingDay = DateAdd("d", 2, dt)
    Case Else
      GetNextWorkingDay = dt
  End Select
End Function

【讨论】:

    【解决方案2】:

    函数weekDay可以帮助你。第二个参数定义返回 1 的日期,vbMonday 会说星期一是 1,星期六 = 6,星期日 = 7

    所以,一种方法是:

    deldate = DateSerial(Year(Date + 3), Month(Date + 3), Day(Date + 3) + 6)
    Do While (Weekday(deldate, vbMonday) >= 6)
        deldate = deldate + 1
    Loop
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-01
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多