Excel-VBA每月的第一个工作日
我有一个工作簿\u open宏,如下所示Excel-VBA每月的第一个工作日,excel,vba,Excel,Vba,我有一个工作簿\u open宏,如下所示 Private Sub Workbook_Open() Sheets("Staff List").Activate If Range("G1") = "Yes" Then Sheets(Format(Now, "mmmm")).Activate Range("A1").Select Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False End If End Sub G1中
Private Sub Workbook_Open()
Sheets("Staff List").Activate
If Range("G1") = "Yes" Then
Sheets(Format(Now, "mmmm")).Activate
Range("A1").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
End If
End Sub
G1中的公式如下:
=如果(或(今天()=工作日(EOMONTH(今天(),-1),1,0),今天()=工作日(EOMONTH(今天(),-1),2,0)),“是”,“否”)
所以,看看今天是一个月的第一个工作日还是第二个工作日。如何消除引用G1的需要,而将公式直接计算到VBA中
非常感谢试试看
If Evaluate("=IF(OR(TODAY()=WORKDAY(EOMONTH(TODAY(),-1),1,0),TODAY()=WORKDAY(EOMONTH(TODAY(),-1),2,0)),""Yes"",""No"")") = "Yes" Then
感谢@jeeped帮助我将其重新表述为:
If Evaluate("OR(TODAY()=WORKDAY(EOMONTH(TODAY(),-1),1,0),TODAY()=WORKDAY(EOMONTH(TODAY(),-1),2,0))") Then
试一试
感谢@jeeped帮助我将其重新表述为:
If Evaluate("OR(TODAY()=WORKDAY(EOMONTH(TODAY(),-1),1,0),TODAY()=WORKDAY(EOMONTH(TODAY(),-1),2,0))") Then
试试看
一个月的第0天是上个月的月。试试看
每月的第0天是前一个月的月。一种不使用工作表功能的方法:
Function WorkdayOfMonth(ByVal dtInput As Date) As Integer
Dim dt As Date
Dim i As Integer
If Weekday(dtInput, vbMonday) < 6 Then
For dt = DateSerial(Year(dtInput), Month(dtInput), 1) To dtInput Step 1
If Weekday(dt, vbMonday) < 6 Then i = i + 1
Next dt
WorkdayOfMonth = i
Else
WorkdayOfMonth = 0
End If
End Function
Sub Test()
If WorkdayOfMonth(Date) > 0 and WorkdayOfMonth(Date) <= 2 Then
'do stuff
End If
End Sub
函数WorkdayOfMonth(ByVal dtInput作为日期)为整数
Dim dt作为日期
作为整数的Dim i
如果工作日(dtInput,vbMonday)<6,则
对于dt=DateSerial(年(dtInput),月(dtInput),1)到dtInput步骤1
如果工作日(dt,vbMonday)<6,则i=i+1
下一个dt
WorkdayOfMonth=i
其他的
WorkdayOfMonth=0
如果结束
端函数
子测试()
如果WorkdayOfMonth(Date)>0且WorkdayOfMonth(Date)不使用工作表函数的方法:
Function WorkdayOfMonth(ByVal dtInput As Date) As Integer
Dim dt As Date
Dim i As Integer
If Weekday(dtInput, vbMonday) < 6 Then
For dt = DateSerial(Year(dtInput), Month(dtInput), 1) To dtInput Step 1
If Weekday(dt, vbMonday) < 6 Then i = i + 1
Next dt
WorkdayOfMonth = i
Else
WorkdayOfMonth = 0
End If
End Function
Sub Test()
If WorkdayOfMonth(Date) > 0 and WorkdayOfMonth(Date) <= 2 Then
'do stuff
End If
End Sub
函数WorkdayOfMonth(ByVal dtInput作为日期)为整数
Dim dt作为日期
作为整数的Dim i
如果工作日(dtInput,vbMonday)<6,则
对于dt=DateSerial(年(dtInput),月(dtInput),1)到dtInput步骤1
如果工作日(dt,vbMonday)<6,则i=i+1
下一个dt
WorkdayOfMonth=i
其他的
WorkdayOfMonth=0
如果结束
端函数
子测试()
如果WorkdayOfMonth(Date)>0且WorkdayOfMonth(Date)@jeeped:If Not Evaluate(=或(今天()=工作日(EOMONTH(TODAY(),-1),1,0),TODAY()=WORKDAY(EOMONTH(TODAY(),-1),2,0)),那么我不知道你可以删除“=”是的。。。我想这是因为我在打印一些东西之后,我需要将评估切换为“否”。忘了换回去。好的。我的错。@jeeped:If Not Evaluate(=或(今天()=工作日(EOMONTH(TODAY(),-1),1,0),TODAY()=工作日(EOMONTH(TODAY(),-1),2,0))),然后我不知道你可以删除“=”是的。。。我想这是因为我在打印一些东西之后,我需要将评估切换为“否”。忘了换回去。好的。我的坏。喜欢这个,也可以在.VBS脚本中使用。喜欢这个,也可以在.VBS脚本中使用。