【问题标题】:Excel VBA - change date/week number to start and end date of the week [duplicate]Excel VBA - 将日期/周数更改为一周的开始和结束日期[重复]
【发布时间】:2020-09-01 23:25:41
【问题描述】:

我正在使用这个 excel 工作表函数来获取从日期前一周(开始和结束)的范围。 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?)

【问题讨论】:

标签: excel vba date


【解决方案1】:

我建议你使用原生 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 的对象

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多