我使用以下vba代码来获取日期的工作日。
Dim strDate
strDate = "01/06/2017"
wStemplaTE.Range("C25").value = WeekdayName(Weekday(DateValue(strDate)))
这应该产生:星期四,但我星期五。 我想这是因为excel认为我的日期是美国格式。 Bu It是英国格式。
请有人告诉我我哪里出错了吗?
答案 0 :(得分:2)
尽管在MDY regiona; l系统上,我将01-Jun-2017
放入Sheet2上的A1并使用自定义数字格式dd/mm/yyyy
。这些中的任何一个都会产生正确的工作日名称(例如星期四)。
Debug.Print WeekdayName(Weekday(Worksheets("Sheet2").Range("A1").Value2))
Debug.Print Format(Worksheets("Sheet2").Range("A1").Value2, "dddd")
这是有效的,因为日期可以被视为原始数字。 01-Jun-2017
恰好是42,887
。
答案 1 :(得分:2)
Dim strDate
根据匈牙利语符号标准,您将其称为String
,但它被声明为[n隐含] Variant
。
Dim theDate As Date
这会将theDate
声明为Date
。
对于明确的日期处理,请将日期视为日期,而不是字符串 - 并尽可能避免Variant
。
如果要分配日期文字(使用yyyy-MM-dd
分隔符),请使用ISO标准#
格式:
theDate = #2017-06-01#
通过这种方式,您不需要将Variant/String
转为Date
- 它已经是。
wStemplaTE.Range("C25").value = WeekdayName(Weekday(theDate))
给你星期四。
这也是:
wStemplaTE.Range("C25").value = Format(theDate, "dddd")
编辑:只需阅读问题下的评论 - 前进请将所有关键信息放入问题本身 。如果没有涉及日期文字,变体或字符串,则@Jeeped's answer有效。
由于日期实际上是在一个单元格中,并且您正在另一个单元格中写下工作日名称,我建议使用全Excel方法:
=TEXT([theDate],"dddd")
以长文日期格式返回工作日名称,作为文本。
还有其他方法,如果真的想要解决WEEKDAY
- 例如查找表:
在某处创建一个表(这里我称之为wkDays
),并使用WEEKDAY
函数的返回值来查找工作日名称。
=WEEKDAY([thedate],1)
周四返回5
。
=INDEX(wkDays[Name],MATCH(WEEKDAY([thedate],1),wkDays[WkDay],0))
返回Thursday
,因为wkDays
表将Thursday
映射到值5
。