我稍微修改了一些在网上找到的代码。
目的:
单击“带有日期的打印”按钮,然后输入开始日期,并让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
提前加油:)
答案 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