Excel vba获取工作日日期的名称?英国日期格式发行

Excel vba获取工作日日期的名称?英国日期格式发行,excel,vba,date,Excel,Vba,Date,我使用下面的vba代码来获取日期的工作日 Dim strDate strDate = "01/06/2017" wStemplaTE.Range("C25").value = WeekdayName(Weekday(DateValue(strDate))) 这应该产生:周四,但我有周五。 我想这是因为excel认为我的日期是美国格式的。但这是英国模式 有人能告诉我哪里出了问题吗?尽管在MDY地区;l系统中,我将01-Jun-2017放入表2中的A1中,并使用自定义编号格式dd/mm/yyyy

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

Dim strDate
strDate = "01/06/2017"
wStemplaTE.Range("C25").value = WeekdayName(Weekday(DateValue(strDate))) 
这应该产生:周四,但我有周五。 我想这是因为excel认为我的日期是美国格式的。但这是英国模式


有人能告诉我哪里出了问题吗?

尽管在MDY地区;l系统中,我将
01-Jun-2017
放入表2中的A1中,并使用自定义编号格式
dd/mm/yyyy
。其中任何一个都会生成正确的工作日名称(例如星期四)


这是因为日期可以被视为原始数字
2017年6月1日
碰巧是
42887

尽管在MDY地区a;l系统中,我将
01-Jun-2017
放入表2中的A1中,并使用自定义编号格式
dd/mm/yyyy
。其中任何一个都会生成正确的工作日名称(例如星期四)

这是因为日期可以被视为原始数字<代码>2017年6月1日恰好是
42887

按照匈牙利符号标准,您称它为
字符串
,但它被声明为[n隐式]
变体

Dim theDate As Date
这将日期声明为日期

对于明确的日期处理,请将日期视为日期,而不是字符串,并尽可能避免使用
Variant

然后,当您要指定日期文字时,请使用ISO标准
yyyy-MM-dd
格式(使用
#
分隔符):

这样,您就不需要将您的
变体/字符串
转换为
日期
——它已经是日期了

给你星期四的时间

这也将:

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

编辑:只需阅读问题下方的评论-继续请将所有关键相关信息放入问题本身。如果不涉及日期文字、变量或字符串,则可以使用

由于日期实际上在一个单元格中,而您正在另一个单元格中写入工作日名称,因此我建议采用全Excel方法:

=TEXT([theDate],"dddd")
以文本形式返回长日期格式以外的工作日名称

如果您确实想在工作日内完成
工作,还有其他方法,例如查找表:

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

=WEEKDAY([thedate],1)
返回星期四的
5

Debug.Print WeekdayName(Weekday(Worksheets("Sheet2").Range("A1").Value2))
Debug.Print Format(Worksheets("Sheet2").Range("A1").Value2, "dddd")
=INDEX(wkDays[Name],MATCH(WEEKDAY([thedate],1),wkDays[WkDay],0))
返回
星期四
,因为
工作日
表将
星期四
映射到值
5

按照匈牙利符号标准,您称它为
字符串
,但它被声明为[n隐式]
变体

Dim theDate As Date
这将日期声明为日期

对于明确的日期处理,请将日期视为日期,而不是字符串,并尽可能避免使用
Variant

然后,当您要指定日期文字时,请使用ISO标准
yyyy-MM-dd
格式(使用
#
分隔符):

这样,您就不需要将您的
变体/字符串
转换为
日期
——它已经是日期了

给你星期四的时间

这也将:

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

编辑:只需阅读问题下方的评论-继续请将所有关键相关信息放入问题本身。如果不涉及日期文字、变量或字符串,则可以使用

由于日期实际上在一个单元格中,而您正在另一个单元格中写入工作日名称,因此我建议采用全Excel方法:

=TEXT([theDate],"dddd")
以文本形式返回长日期格式以外的工作日名称

如果您确实想在工作日内完成
工作,还有其他方法,例如查找表:

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

=WEEKDAY([thedate],1)
返回星期四的
5

Debug.Print WeekdayName(Weekday(Worksheets("Sheet2").Range("A1").Value2))
Debug.Print Format(Worksheets("Sheet2").Range("A1").Value2, "dddd")
=INDEX(wkDays[Name],MATCH(WEEKDAY([thedate],1),wkDays[WkDay],0))

返回
星期四
,因为
工作日
表将
星期四
映射到值
5

您考虑过将字符串更改为
2017年6月1日
以消除混淆吗?@Jeeped在本例中,StrDate定义为“01/06/2017”但StrDate实际上链接到另一个工作簿,该工作簿的格式必须为“01/06/2017”,如果它是实际工作表中实际单元格中的实际日期,则使用
范围(…).Value2
和摆脱
DateValue
@Jeeped我得到一个超出范围的方法或对象错误继续请在问题本身中列出所有关键相关信息。回答一个问题之后才注意到实际问题中的代码几乎完全不相关,这有点令人沮丧,因为“真正的代码”与问题中的代码无关。注释应包含澄清请求,而不是完全改变问题内容的信息。您是否考虑过将字符串更改为
01-Jun-2017
以消除混淆?本例中的@Jeeped StrDate定义为“01/06/2017”但StrDate实际上链接到另一个工作簿,该工作簿的格式必须为“01/06/2017”,如果它是实际工作表中实际单元格中的实际日期,则使用
范围(…).Value2
和摆脱
DateValue
@Jeeped我得到一个超出范围的方法或对象错误继续请在问题本身中列出所有关键相关信息。回答一个问题之后才注意到实际问题中的代码几乎完全不相关,这有点令人沮丧,因为“真正的代码”与问题中的代码无关。评论应该包含澄清请求,而不是完全改变问题内容的信息。