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

Excel 如何在VBA中的语句中使用WEEKNUM函数?,excel,datetime,excel-formula,vba,Excel,Datetime,Excel Formula,Vba,我想写一个VBA,检查WEEKNUM或ISOWEEKNUM是否等于该值,然后运行宏的其余部分。我尝试过这样做,但由于将“今天”用作arg,因此出错。WEEKNUM函数将包含1月1日的一周视为一年中的第一周。然而,有一个欧洲标准将第一周定义为新年中大部分天数(四天或更多)的一周。这意味着,对于一月的第一周有三天或更少的年份,WEEKNUM函数返回的周数根据欧洲标准是不正确的 Sub test() Dim wn As Integer wn = Format(Date, "ww")

我想写一个VBA,检查WEEKNUM或ISOWEEKNUM是否等于该值,然后运行宏的其余部分。我尝试过这样做,但由于将“今天”用作arg,因此出错。

WEEKNUM函数将包含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月4日总是在任何一年的第一周
  • 一年中的第一个星期四总是在第一周

    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         
    
对于今天,即2016年9月7日,第一个函数给出weeknum 28,而ISO weeknum函数给出27

对于2015年9月7日,上述两个程序将给出第28周

要在Excel的单元格公式中获取当前日期(不含时间部分),请使用:

=TODAY()
但是,在VBA编程环境中,函数应该是
DATE()

Now
包含当前日期和时间,而
date
time
是日期和时间的独立命令。这取决于您需要哪些信息。

在VBA中使用
WEEKNUM()
TODAY()
有一种方法:

Sub dural()
    If Evaluate("=weeknum(today())") = 28 Then
        MsgBox 28
    Else
        MsgBox "not 28"
    End If
End Sub
使用或将本机函数调用到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日的一周视为一年中的第一周。然而,有一个欧洲标准将第一周定义为新年中大部分天数(四天或更多)的一周。这意味着,如果一月份的第一周有三天或更少,WEEKNUM函数将返回根据欧洲标准不正确的周数。比我的方法更好。哦,天哪!这真的很好:谢谢你的解释,这对我来说也很好;)格式(日期,“ww”)美观紧凑。我喜欢!奇怪的是,当构造要作为公式计算的字符串时,
=
并不是严格必需的,但是它的包含并没有什么害处,并且可以提供清晰性。