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
。