【问题标题】:VBA Excel code that autopopulates the next day's date, but only for weekdays自动填充第二天日期的 VBA Excel 代码,但仅适用于工作日
【发布时间】:2018-08-23 17:26:36
【问题描述】:

我有这段代码只是挂在位于 VBA 项目中的工作表中,该项目自动填充 Excel 表单的日期。我一直在修改它,让它在个人在单元格 I6 中输入姓名时填充当天的日期。在第 8 行,

r.Offset(0, 12).Value = Date + 1

我添加了一个 1 来填充第二天的日期。现在,如果在星期五,我想进一步输入下一个工作日的日期。因此,每个工作日,当用户在单元格 I6 中输入数据时,它将下一个工作日的日期插入到同一范围内向下 12 列的单元格中,除了星期五,我希望填充的日期为下周的星期一。

Private Sub Worksheet_Change(ByVal Target As Range)
     Dim I As Range, AF As Range, Inte As Range, r As Range
     Set I = Range("I6")
     Set Inte = Intersect(I, Target)
     If Inte Is Nothing Then Exit Sub
     Application.EnableEvents = False
         For Each r In Inte
             r.Offset(0, 12).Value = Date + 1
         Next r
     Application.EnableEvents = True
End Sub

我需要一个 if 语句吗?如果是这样,我可以把它放在 For 循环中(?)。我不是编码员,我需要这个来简化我的工作生活。任何指导将不胜感激。

【问题讨论】:

    标签: vba excel excel-2010


    【解决方案1】:

    已经有跳过周末的功能。无需重新发明轮子。只需使用WORKDAY 函数

    r.Offset(0, 12) = Application.WorksheetFunction.Workday(Date, 1)
    

    【讨论】:

    • vba 甚至还有一个 Weekday 函数 :)
    【解决方案2】:

    添加If 语句来检查今天是否是星期五:

    Private Sub Worksheet_Change(ByVal Target As Range)
         Dim I As Range, AF As Range, Inte As Range, r As Range
         Set I = Range("I6")
         Set Inte = Intersect(I, Target)
         If Inte Is Nothing Then Exit Sub
         Application.EnableEvents = False
             For Each r In Inte
                If Format(Date, "dddd") = "Friday" Then
                    r.Offset(0, 12).Value = Date + 3
                Else
                    r.Offset(0, 12).Value = Date + 1
                End If
             Next r
         Application.EnableEvents = True
    End Sub
    

    【讨论】:

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