首页
学习
活动
专区
圈层
工具
发布

月底VBA
EN

Stack Overflow用户
提问于 2016-07-27 21:12:04
回答 1查看 1.2K关注 0票数 0

我需要帮助在VBA中编写一行代码来返回月底日期。月底日期的逻辑是这样的.

如果这个月的最后一天结束..。

星期日:那么那个月的最后一天就是前一个星期六。(昨天)

星期一:那么那个月的最后一天是上个星期六。(2天前)

星期二:那么那个月的最后一天是上个星期六。(3天前)

星期三:那这个月的最后一天是即将到来的星期六(未来的三天)。

星期四:那这个月的最后一天是即将到来的星期六(未来的两天)。

星期五:那这个月的最后一天是即将到来的星期六(未来的一天)。

我现在的代码在下面。月底日期的格式如下所示。2016-07-02

代码语言:javascript
复制
Sub Macro1()
With ActiveWorkbook.Connections("ABC Query").ODBCConnection
    .BackgroundQuery = True
    .CommandText = Array( _
    "exec [dbo].[getBSC_Monthly] @MonthEndDate = **where I need the line of code**")
EN

回答 1

Stack Overflow用户

发布于 2016-07-27 21:54:11

Weekday()函数将告诉您一周中当前的一天是什么(Sun=1、Mon=2等)。因此,如果工作日()< 4,那么就需要工作日()前的日期。如果WeekDay() >= 3,那么您希望在未来的7-工作日()天。

代码语言:javascript
复制
Function MonthEnd(d)
    Dim actualmonthend, dow, ans
    actualmonthend = DateSerial(Year(d), Month(d) + 1, 1) - 1
    dow = Weekday(actualmonthend)
    If (dow < 4) Then
        ans = actualmonthend - dow
    Else
        ans = actualmonthend + (7 - dow)
    End If
    MonthEnd = ans
End Function

如果您真的只想要一个表达式,那么这个表达式就能工作:

代码语言:javascript
复制
DateSerial(Year(d), Month(d) + 1, 1) - 1 - Weekday(DateSerial(Year(d), Month(d) + 1, 1) - 1) + (7 * Abs(Weekday(DateSerial(Year(d), Month(d) + 1, 1) - 1) >= 4))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38623269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档