Excel VBA-将日期/周号更改为一周的开始和结束日期

时间:2020-09-01 23:25:41

标签: excel vba date

我使用此excel工作表功能从日期ex算起一周的范围(开始和结束)。 14.08.2020给我10.08-16.08。我试图将其转换为VBA功能,因为它将更易于使用,但是我全脑都停电了。你能告诉我我做错了什么吗?

Excel:

=TEXT(DATE(2020;1;1)+(WEEKNUM(D1;2)-1)*7-WEEKDAY(DATE(2020;1;1);2)+1;"DD.MM")&"-"&TEXT(DATE(2020;1;1)+(WEEKNUM(D1;2)-1)*7-WEEKDAY(DATE(2020;1;1);2)+7;"DD.MM")

VBA:

Function dog(x As String) As String

dog = WorksheetFunction.Text(DateSerial(2020, 1, 1) + (WorksheetFunction.WeekNum(A1, 2) - 1) * 7 - Weekday(DateSerial(2020, 1, 1), vbMonday) + 1, "DD.MM") & "-" & WorksheetFunction.Text(DateSerial(2020, 1, 1) + (WorksheetFunction.WeekNum(A1, 2) - 1) * 7 - Weekday(DateSerial(2020, 1, 1), vbMonday) + 7, "DD.MM")
End Function

(ARG)或(NAME?)都不起作用

1 个答案:

答案 0 :(得分:0)

我建议您使用本机VBA功能:

Option Explicit
Function dog(x As Date) As String
    Dim dStartOfWeek As Date 'a Monday
    Dim dEndOfWeek As Date   'a Sunday
    
dStartOfWeek = x - Weekday(x) + 2
dEndOfWeek = dStartOfWeek + 6

dog = Format(dStartOfWeek, "dd.mm-") & Format(dEndOfWeek, "dd.mm")

End Function
  • 您是否有某些理由宣布您的输入参数为字符串类型?

  • 如果在工作表上出现#NAME?错误,则可能没有将UDF放入常规模块,或者您有多个名为dog

    的对象。
相关问题