2017-08-03 190 views
2

我正在写一些Excel的VBA,我需要找出当前或即将到来的星期六的日期如何了解下个星期六或当前星期六的日期?

因此,如果是星期五,我需要获取明天的日期(星期六)。

如果今天是星期六,那么我只是想要今天的日子。

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

如果是周一然后在下周六

我不知道是否有在Excel或VBA任何可以帮助我完成这个

+0

也许这有助于https://superuser.com/questions/376698/how-to-get-the-dates-of-the-current-monday-wednesday-and-friday-of-the-current – MatSnow

回答

1

这是容易理解的,使用vbDays变量和Select Case

一般情况下,你有3个案件 - 今天是星期六,星期日或其他。这些在Select Case中展示。

该函数是日期,因此在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 
+0

如果调用非常接近午夜,则有机会返回错误的值。 – GSerg

5

在Excel中,你可以使用这个公式:

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

如果您不仅仅使用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 
+0

很棒,对工作代码没有任何解释。 – GibralterTop

+0

“工作代码”和“恰好在一台机器上给出正确结果的代码”是完全不同的事情。此代码基本上已被破坏,只能在'en-us'语言环境中使用。它的方法也非常错误,因为它将所有日期存储为字符串,并使用一个循环,而不需要一个循环。 – GSerg

+0

@GSerg很多你的观点更适合https:/codereview.stackexchange.com这不是发布的地方。 OP从未声明区域设置。考虑到该网站的语言以及我看到的大部分问题都是“en-us”格式。我在这里看到没有错。 – GibralterTop

0

试试这个。使单元格格式为“日期”

=TODAY()+6-WEEKDAY(TODAY(),2) 
相关问题