Vba 我怎样才能知道下星期六的日期还是现在的星期六?

Vba 我怎样才能知道下星期六的日期还是现在的星期六?,vba,excel,date,Vba,Excel,Date,我正在为Excel编写一些VBA,我需要计算出当前或即将到来的星期六的日期 所以如果是星期五,我需要知道明天(星期六)的日期 如果今天是星期六,那么我只想知道今天的日期 如果是星期天,那么我需要昨天的日期 如果是星期一,那么下星期六 我想知道Excel或VBA中是否有任何东西可以帮助我实现这一点在Excel中,您可以使用以下公式: =TODAY()-WEEKDAY(TODAY())+IF(WEEKDAY(TODAY())>1, 7, 0) 如果您不只是在使用excel,并且在其他vba项

我正在为Excel编写一些VBA,我需要计算出当前或即将到来的星期六的日期

所以如果是星期五,我需要知道明天(星期六)的日期

如果今天是星期六,那么我只想知道今天的日期

如果是星期天,那么我需要昨天的日期

如果是星期一,那么下星期六


我想知道Excel或VBA中是否有任何东西可以帮助我实现这一点

在Excel中,您可以使用以下公式:

=TODAY()-WEEKDAY(TODAY())+IF(WEEKDAY(TODAY())>1, 7, 0)

如果您不只是在使用excel,并且在其他
vba
项目中需要它,那么这将提供您想要的结果

Private Function saturdayFunction()
    Dim dt As String
    Dim lpDT As String

    lpDT = Format(Now, "yyyy/MM/dd")

    If Format(Now, "DDDD") = "Saturday" Then
        dt = Format(Now, "yyyy/MM/dd")
    ElseIf Format(Now, "DDDD") = "Sunday" Then
        dt = Format(Now - 1, "yyyy/MM/dd")
    Else
        Do While Not dt = "Saturday"
            dt = Format(CDate(lpDT) + 1, "DDDD")
            lpDT = Format(CDate(lpDT) + 1, "yyyy/MM/dd")
        Loop

        dt = lpDT
    End If

    saturdayFunction = dt
End Function

试试这个。将格式单元格设置为“日期”


使用
vbDays
变量和
Select Case
可以很容易地理解以下内容

一般来说,你有3个病例-今天是星期六、星期天或其他。这些将在选择的案例中显示

函数是date,因此在Excel中它将被格式化为标准日期结果

Option Explicit

Public Function SaturdayIsComing() As Date

    Select Case Weekday(Now)

        Case vbSaturday
        SaturdayIsComing = Now

        Case vbSunday
        SaturdayIsComing = DateAdd("d", -1, Now)

        Case Else
        SaturdayIsComing = DateAdd("d", vbSaturday - Weekday(Now), Now)

    End Select

End Function

如果在午夜前调用,可能会有机会返回错误的值。很好,没有解释工作代码的否决票。“工作代码”和“在一台机器上恰好给出正确结果的代码”是非常不同的事情。此代码从根本上被破坏,只在
en-us
locale上工作。它的方法也是非常错误的,因为它将所有日期存储为字符串,并在不需要的地方使用循环。@GSerg您的许多观点更适合https:/codereview.stackexchange.com,而https:/codereview.stackexchange.com不是发布这些信息的地方。OP从未声明过语言环境。考虑到网站的语言和我看到的大部分问题都是
en-us
格式。我看这里没什么问题。
Option Explicit

Public Function SaturdayIsComing() As Date

    Select Case Weekday(Now)

        Case vbSaturday
        SaturdayIsComing = Now

        Case vbSunday
        SaturdayIsComing = DateAdd("d", -1, Now)

        Case Else
        SaturdayIsComing = DateAdd("d", vbSaturday - Weekday(Now), Now)

    End Select

End Function