vba获取工作日的日期名称?英国日期格式问题

时间:2017-03-03 16:38:04

标签: excel vba date

我使用以下vba代码来获取日期的工作日。

Dim strDate
strDate = "01/06/2017"
wStemplaTE.Range("C25").value = WeekdayName(Weekday(DateValue(strDate))) 

这应该产生:星期四,但我星期五。 我想这是因为excel认为我的日期是美国格式。 Bu It是英国格式。

请有人告诉我我哪里出错了吗?

2 个答案:

答案 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 - 例如查找表:

index/match lookup using a lookup table

在某处创建一个表(这里我称之为wkDays),并使用WEEKDAY函数的返回值来查找工作日名称。

=WEEKDAY([thedate],1)

周四返回5

=INDEX(wkDays[Name],MATCH(WEEKDAY([thedate],1),wkDays[WkDay],0))

返回Thursday,因为wkDays表将Thursday映射到值5