如何在 VBA 中的语句中使用 WEEKNUM 函数



我想写一个VBA,检查WEEKNUM或ISOWEEKNUM是否等于该值,然后运行宏的其余部分。我尝试这样做,但由于使用 TODAY 作为参数而出现错误。

使用 WorksheetFunction 对象或 Excel 应用程序对象将本机函数调用到 VBA 中。

debug.print WorksheetFunction.WeekNum(Date)
debug.print application.WeekNum(Date)
debug.print WorksheetFunction.IsoWeekNum(Date)
debug.print application.IsoWeekNum(Date)
if application.WeekNum(Date) = 28 then
     'it is currently 28
end if

在 VBA 中,TODAY()函数被替换为 Date

WEEKNUM 函数将包含 1 月 1 日的一周视为一年的第一周。但是,有一个欧洲标准将第一周定义为新年中大部分天数(四天或更多)的一周。这意味着,对于 1 月第一周有三天或更短时间的年份,WEEKNUM 函数返回根据欧洲标准不正确的周数。

Sub test()
    Dim wn As Integer
    wn = Format(Date, "ww")
    Debug.Print wn
End Sub

ISO Weeknum UDF 是。
ISO 周数

一年中第一周的 ISO 标准:- 一周从星期一开始;所以星期一是任何一周的第一天- 一年中的第一周必须包含该年至少 4 天

  • 如果是星期一、星期二、星期三或星期四,则为 1 月 1 日,则在第 1 周
  • 1 月 4 日总是在任何一年的第 1 周
  • 一年中的第一个星期四总是在第 1 周

    Public Function ISOweeknum(ByVal v_Date As Date) As Integer
        ISOweeknum = DatePart("ww", v_Date - Weekday(v_Date, 2) + 4, 2, 2)
    End Function
    

    要测试此函数,可以添加另一个小例程。

     Sub test_today_weeknum()
         Dim dt As Date
         Dim wno As Integer
        'In this example, the variable called LDate would now contain the current system date.
         dt = Date
         Debug.Print dt
         wno = ISOweeknum(dt)
         Debug.Print wno
     End Sub         
    

对于今天,即 9-7-2016,第一个给出周数 28,而 ISO 周数函数给出 27

对于 9-7-2015 上述两个例程将给出周数 28

若要在 Excel 中的单元格公式中获取当天(不带时间部分),请使用:

=TODAY()

但是,在 VBA 编程环境中,该功能将DATE()Now包含当前日期和时间,而DateTime是日期和时间的单独命令。这完全取决于您需要哪些信息。

以下是在 VBA 中同时使用 WEEKNUM()TODAY() 的一种方法:

Sub dural()
    If Evaluate("=weeknum(today())") = 28 Then
        MsgBox 28
    Else
        MsgBox "not 28"
    End If
End Sub

相关内容

  • 没有找到相关文章

最新更新