2017-04-19 39 views
0

我需要解决只给出了日期的日部分当前周(例如2017年4月1日)内的日期,这可能与Excel VBA? 我已经看过像这样的excel vba - How to get the Day Name of Date? 的问题,但他们回答不同的问题。我也研究过使用像vbTuesday这样的常量,但他们没有帮助,因为我仍然需要弄清楚如何将当天的名字连接到当前的星期。Excel VBA - 有没有一种方法可以在当前一周中获得日期,只给定日期名称?

+0

究竟是输入?像这样的工作:'?Clng(Format(now + 5,“ww”))''如果你把它写在直接窗口中?它给出当天+5天的一周。 – Vityata

+0

输入是一个字符串的日期名称(从下拉列表中选择,例如“Monday”)。谢谢,我现在就试试。编辑:不知道这是我真正的后。 'd = CLng(格式(“星期一”+ 5,“ww”))'给出类型不匹配错误。 – warsong

回答

1

的主要问题是把你一天的名称为天数 - 因此周二或周二返回1日(星期一为0天)。
在第一个想到我会使用一个Select Case声明VBA,但有可能是一个更好的办法。

下面的代码将计算星期一日期(dReturnDate),然后添加一个数字取决于你问的天。无意义的日期名称将返回#Num错误。

Public Function DateFromDay(DayName As String) As Variant 

    Dim dReturnDate As Date 
    Dim lDayNumber As Long 

    dReturnDate = Date - Weekday(Date - 2) 

    Select Case DayName 
     Case "Mon", "Monday" 
      lDayNumber = 0 
     Case "Tue", "Tuesday" 
      lDayNumber = 1 
     Case "Wed", "Wednesday" 
      lDayNumber = 2 
     Case "Thu", "Thursday" 
      lDayNumber = 3 
     Case "Fri", "Friday" 
      lDayNumber = 4 
     Case "Sat", "Saturday" 
      lDayNumber = 5 
     Case "Sun", "Sunday" 
      lDayNumber = 6 
     Case Else 
      lDayNumber = -1 
    End Select 

    If lDayNumber >= 0 Then 
     DateFromDay = dReturnDate + lDayNumber 
    Else 
     DateFromDay = CVErr(xlErrNum) 
    End If 

End Function 

工作表:
=DateFromDay("Tuesday")返回2017年4月18日
=DateFromDay("Any Day")回报#Num!

1

在很大程度上取决于你是否要使用vbUseSystemDayOfWeek或者如果单纯治疗星期一作为第1天是可以接受的。您还会需要额外的代码,如果你想接受,例如,“星期一”和“星期一”,如果你想保护的查找与UCase

原则,不过,该功能可能是简单的:

Public Function DateFromDayName(dayName As String) As Date 
    Dim d As Long 

    d = WorksheetFunction.Match(dayName, _ 
           Array("Monday", _ 
             "Tuesday", _ 
             "Wednesday", _ 
             "Thursday", _ 
             "Friday", _ 
             "Saturday", _ 
             "Sunday"), _ 
           0) 

    DateFromDayName = Now - Weekday(Now, vbMonday) + d 

End Function 
相关问题