vba获得date的名称? 英国date格式问题

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

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

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

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

尽pipe在MDY区域系统中,我将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") 

这是有效的,因为date可以被认为是一个原始数字。 01-Jun-2017恰好是42,887

 Dim strDate 

按照匈牙利标记标准,你称它为一个String ,但是它被声明为一个[n隐式] Variant

 Dim theDate As Date 

theDate Date声明为Date

对于明确的date处理,将date视为date ,而不是string – 并尽可能避免Variant

然后使用ISO标准yyyy-MM-dd格式来分配date文字 (使用#分隔符):

 theDate = #2017-06-01# 

这样,你不需要把你的Variant/String并把它变成Date这已经是一个date

 wStemplaTE.Range("C25").value = WeekdayName(Weekday(theDate)) 

给你星期四,因为它应该。

这也是:

 wStemplaTE.Range("C25").value = Format(theDate, "dddd") 

编辑:只要阅读下面的问题的评论 – 请将所有关键信息放在问题本身 。 @ Jeeped的答案如果没有date文字,变体或string涉及的作品。

由于date实际上是在一个单元格中,而且您正在将星期几名称写入另一个单元格中,所以我build议使用全部Excel方法:

 =TEXT([theDate],"dddd") 

以文本forms返回长date格式中的星期几名称。

还有其他方法,如果你真的想在WEEKDAY上工作 – 例如查找表:

使用查找表进行索引/匹配查找

在某个地方制作一个表格(这里我称之为wkDays ),并使用wkDays函数的返回值来查找星期wkDays的名字。

 =WEEKDAY([thedate],1) 

星期四返回5

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

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