【问题标题】:VBA convert string with day and month name to dateVBA将带有日期和月份名称的字符串转换为日期
【发布时间】:2020-10-18 19:18:56
【问题描述】:

我有一个string 和一个date 的法语长格式,如下所示:

mardi 7 juillet 2020

如何将其转换为 VBA 中的日期类型?我尝试使用CDateDateValueDateSerial,但我无法弄清楚。如果 VBA 的日期格式为 Long Date,那么一定有办法。我只是找不到任何人用这种格式提出这个转换问题。

请注意,我有很多日期,因为我要循环处理许多邮件,所以我需要一个非常通用的解决方案,所以一个考虑到所有可能的工作日(lundi、mardi、...、dimanche)的解决方案,所有可能的日子 1 到 31 和月 Janvier 到 12 月以及所有可能的年份。

感谢您的帮助。

【问题讨论】:

  • 法语是您的默认系统语言环境吗?当您尝试? formatdatetime(now, vbLongDate) 时会出现什么?
  • 是的,我得到的是:dimanche 18 octobre 2020

标签: vba string date type-conversion


【解决方案1】:

我同意应该有一个更容易的转换。此函数将去掉工作日(这是多余的),然后依靠 VBA 类型转换来获取日期类型(注意。我只在英语(英国)区域设置下测试过这个)。

Option Explicit
Public Function DateFromLongFormat(strLongFormatDate As String) As Date
    Dim strDate As String
    strDate = Right(strLongFormatDate, Len(strLongFormatDate) - InStr(1, strLongFormatDate, " "))

    DateFromLongFormat = strDate
End Function

在今天使用一个简单的测试例程进行了尝试:

Sub TestDate()
    Dim strToday As String
    strToday = Format(Now(), "dddd dd mmmm yyyy")

    Dim dt As Date
    dt = DateFromLongFormat(strToday)
End Sub

【讨论】:

  • 谢谢!但我认为微软应该改变 CDate 以便能够考虑格式,无论如何再次感谢!
  • 我同意...注意。 FormatDateTime 中的常量 vbLongDate 采用区域设置中的长日期格式。例如,我对“长日期”的设置是“2017 年 4 月 5 日”,这就是我得到的。此外,从 MS 页面:“CDate 根据系统的区域设置识别日期格式。如果以识别的日期设置之一以外的格式提供,则可能无法确定正确的日、月和年顺序。此外,如果还包含星期几字符串,则无法识别长日期格式"
猜你喜欢
  • 1970-01-01
  • 2016-03-09
  • 2023-03-09
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 2021-01-01
相关资源
最近更新 更多