Excel VBA-从自动时间表打印中删除周末

时间:2019-03-12 00:24:32

标签: excel vba printing dateadd

我稍微修改了一些在网上找到的代码。

目的:

单击“带有日期的打印”按钮,然后输入开始日期,并让Excel自动生成/打印一个月的时间表(比以前的要打印6周页面的电子表格要好得多,并且您必须进行编辑每个日期手动)。

问题:

  • 它在周末打印,浪费纸张。有没有一种方法可以引用日期列表(周末,公共假期),而不生成打印日期?

  • 您将在代码中看到日期格式为m / d / yyyy,这奇怪地打印为dd / mm / yyyy(这正是我想要的)。当代码为dd / mm / yyyy时,它可以正确打印(20/03/2019),但是如果转到下个月,它将切换为美国格式m / d / yyyy(04/20/2019)。我知道这似乎没有任何意义,但是将其设置为m / d / yyyy实际上可以在任何开始/结束日期中将其打印为dd / mm / yyyy。我想知道为什么,并且代码中的dd / mm / yyyy可以在任何日期范围内正确打印。

代码:

Sub PrintSheet()
    Dim s As String
    Dim d As Date
    s = InputBox(Prompt:="Please enter the start date")
    If Not IsDate(s) Then
        MsgBox "Incorrect date", vbExclamation
        Exit Sub
    End If
    For d = CDate(s) To DateAdd("m", 1, CDate(s)) - 1
        Range("F2").Value = Format(d, "dddd")
        Range("I2").Value = "" & Format(d, "m/d/yyyy")
        ActiveSheet.PrintOut
    Next d
End Sub

提前加油:)

1 个答案:

答案 0 :(得分:0)

您可以使用工作日功能。它返回一个从1到7的数字。您只能在工作日过滤1-5。

Sub PrintSheet()
    Dim s As String
    Dim d As Date
    s = InputBox(Prompt:="Please enter the start date")
    If Not IsDate(s) Then
        MsgBox "Incorrect date", vbExclamation
        Exit Sub
    End If
    For d = CDate(s) To DateAdd("m", 1, CDate(s)) - 1
        If Weekday(d, vbMonday) < 6 Then
        Range("F2").Value = Format(d, "dddd")
        Range("I2").Value = "" & Format(d, "m/d/yyyy")
        'MsgBox ("printing ") 'for testing
        ActiveSheet.PrintOut
        End If
    Next d
End Sub