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

问题描述 投票:0回答:1

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

目的:

点击“打印日期”按钮,然后输入开始日期,并让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

提前干杯:)

excel vba printing dateadd
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.