Excel VBA获取上一个工作日

Excel VBA获取上一个工作日,excel,vba,Excel,Vba,我已经创建了一个VBA来自动在单元格中填充昨天的日期,但需要帮助,因为当我在周一触发它时,如何将日期设置为6月16日(星期五)而不是6月18日(星期日) `If .Column <> 11 Or .Row < 1 Then Exit Sub If .Value = "Select" Then If .Offset(0, 1).Value = "" Then .Offset(0, 1).NumberFormat = "mm/dd/y

我已经创建了一个VBA来自动在单元格中填充昨天的日期,但需要帮助,因为当我在周一触发它时,如何将日期设置为6月16日(星期五)而不是6月18日(星期日)

`If .Column <> 11 Or .Row < 1 Then Exit Sub
    If .Value = "Select" Then
        If .Offset(0, 1).Value = "" Then
            .Offset(0, 1).NumberFormat = "mm/dd/yy"
            .Offset(0, 1).Value = Now - 1
            .Offset(0, 2).Value = Now - 1
            .Offset(0, 2).NumberFormat = "mmm-yy" '<~~ mmm-yy
            .Offset(0, 3).Value = GetMonthWeek(Now - 1)
        End If'
`如果.Column 11或.Row<1,则退出Sub
如果.Value=“选择”,则
如果.Offset(0,1).Value=”“,则
.Offset(0,1).NumberFormat=“mm/dd/yy”
.Offset(0,1).Value=Now-1
.Offset(0,2).Value=Now-1

.Offset(0,2).NumberFormat=“mmm yy””我不确定是否有任何内置方法,但以下逻辑工作:

Dim tempDate
tempDate = DateAdd("d", -1, Date)         'Today's date - 1
While Weekday(tempDate) = 1 Or Weekday(tempDate) = 7     'If tempDate is a Sunday or a Saturday, keep on subtracting one day until we get a weekday
    tempDate = DateAdd("d", -1, tempDate)
Wend
Cells(1, 1).Value = tempDate

尝试在您的代码中实现这一点,并让我知道它是否有效。:)

我不确定是否有任何内置的方法,但以下逻辑是有效的:

Dim tempDate
tempDate = DateAdd("d", -1, Date)         'Today's date - 1
While Weekday(tempDate) = 1 Or Weekday(tempDate) = 7     'If tempDate is a Sunday or a Saturday, keep on subtracting one day until we get a weekday
    tempDate = DateAdd("d", -1, tempDate)
Wend
Cells(1, 1).Value = tempDate

尝试在您的代码中实现这一点,并让我知道它是否有效。:)

工作表函数可以轻松检索上一个星期五,无论当前日期是否为星期五

'last Friday regardless
=A2-WEEKDAY(A2, 16)
'last Friday unless a Friday
=A2-WEEKDAY(A2, 16)+(WEEKDAY(A2)=6)*7
工作日和布尔运算可直接转移到VBA


工作表函数可以轻松检索上一个星期五,无论当前日期是否为星期五

'last Friday regardless
=A2-WEEKDAY(A2, 16)
'last Friday unless a Friday
=A2-WEEKDAY(A2, 16)+(WEEKDAY(A2)=6)*7
工作日和布尔运算可直接转移到VBA


因此您知道
GetMonthWeek
不是一个本机VBA命令或函数,因此任何解决问题的实际尝试都必须知道它是如何定义的(UDF?)首先。因此,您知道
GetMonthWeek
不是一个本机VBA命令或函数,因此任何解决问题的实际尝试都必须首先知道如何定义它(UDF?)。