【问题标题】:VBA how many mondays till date and VBA errorsVBA到目前为止多少个星期一和VBA错误
【发布时间】:2017-06-27 18:48:51
【问题描述】:

我正在尝试在 VBA 中编写一个脚本,该脚本将日期作为输入,然后知道该日期是从本周到下周一,还是比该日期长多少周。

编辑:以下部分已解决,但我仍然可以在顶部使用一些帮助。我愚蠢地使用 VB.Net 代码而不是 VBA。

我查看了下面我将链接的页面,它似乎给了我一个方向。 Finding the date of monday in a week with VB.NET

问题是我无法在我的 VBA 代码中使用这些命令。这很奇怪,因为它似乎对其他人都有效,但 VBA 不允许我自己使用这些命令。谁能帮我理解为什么?以下几行是在我将代码添加到我的 excel VBA 模块中时返回的红色。 “日期。”也不行。

Dim today As Date = Date.Today    
Dim dayIndex As Integer = today.DayOfWeek

dayIndex += 7

Dim dayDiff As Integer = dayIndex - DayOfWeek.Monday    
Dim monday As Date = today.AddDays(-dayDiff)

【问题讨论】:

  • I am attempting to write a script in VBA... 那么你不需要 VB.NET 标签。如果您不确定,请参阅标签上的使用指南文本
  • 在 vba 中,您不能在同一行上声明变量并为其赋值。拆分它们:Dim today As Datetoday = Date 等等。
  • dayIndex += 7 必须是dayIndex = dayIndex + 7
  • 您正在将 VB.NET 代码复制并粘贴到 VBA 编辑器中。当然不是编译——VB.NET 不是 VBA。
  • 查一下。按F2找到VBA.DateTime模块,你会很快找到你可以使用的功能。

标签: vba excel date


【解决方案1】:

没有 VBA 你可以使用公式:

=ABS(INT((WEEKDAY(A1-2)-A1+TODAY())/7))

A1 是开始日期
2 对应于一周中的星期一
除以 7 得到它的计数
您可以将 Today() 更改为任何日期,在这种情况下,您可以计算两个日期之间的星期一数

Sunday     1
Monday     2
Tuesday    3
Wednesday  4
Thursday   5
Friday     6
Saturday   7

您可以将公式中的 2 更改为 1 到 7 之间的任何数字,以对应您需要的任何工作日

使用 VBA
您需要一个 UDF 用户定义函数:

Function NumbWkDays(StartDate As Date, EndDate As Date, _
    Days As Long) As Integer

     ' Returns the number of qualifying days between (and including)
     ' StartDate and EndDate. Qualifying days are whole numbers where
     ' each digit represents a day of the week that should be counted,
     ' with Monday=1, Tuesday=2, etc. For example, all Mondays, Tuesdays
     ' and Thursdays are to be counted between the two dates, set
     ' WkDays = 124 on your worksheet.
     '

    Dim iDate As Date
    Dim strQdays As String

    strQdays = CStr(Days)
    NumbWkDays = 0

    For iDate = StartDate To EndDate
        If strQdays Like "*" & CStr(Weekday(iDate, vbMonday)) & "*" Then
            NumbWkDays = NumbWkDays + 1
        End If
    Next iDate

End Function  

那么你必须使用它作为公式:

=NumbWKdays(startdate,Enddate,1)

1 代表星期一

要创建 UDF,您必须:

  • 单击开发人员选项卡下的 Visual Basic
  • 插入
  • 模块
  • 粘贴代码
    然后在工作表中使用上面的函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 2022-01-07
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    相关资源
    最近更新 更多