首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access:在Intl (法语) Windows上转换US字符串日期

Access:在Intl (法语) Windows上转换US字符串日期
EN

Stack Overflow用户
提问于 2017-11-03 15:52:44
回答 1查看 194关注 0票数 1

我的VBA代码是读取一个文本文件的字符串日期,如01-10月-2017年。

在带有法国或比利时设置的Windows上,使用CDate()DateValue()在大多数日期都是完美的,但对于2月-APR-5月-6月-8月,在那里"févr“、"AVR”、"mai“、"Juin”、"Juil“是可以预期的。

例如,CDate("15-JUN-2017")将返回一个错误。

在我编写一个VBA函数来处理这个问题之前,我想知道是否有什么神奇的函数可以处理这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 16:51:28

我写了以下文章,这似乎对法语很有效。可以修改为涵盖所有12个月,以确保与其他语文工作。

代码语言:javascript
复制
Function cvtUsDt(ByVal sUsDt As String) As Date
'CDate and DateValue do not work well on US text dates like 15-FEB-2017
'on machine with some non english regional settings
'problematic months: FEB-APR-MAY-JUN-JUL-AUG-DEC
    Dim sMon As String
    If sUsDt Like "*FEB*" Then
        sMon = Format(DateSerial(2017, 2, 10), "mmm")
        sUsDt = Replace(sUsDt, "FEB", sMon)

    ElseIf sUsDt Like "*APR*" Then
        sMon = Format(DateSerial(2017, 4, 10), "mmm")
        sUsDt = Replace(sUsDt, "APR", sMon)

    ElseIf sUsDt Like "*MAY*" Then
        sMon = Format(DateSerial(2017, 5, 10), "mmm")
        sUsDt = Replace(sUsDt, "MAY", sMon)

    ElseIf sUsDt Like "*JUN*" Then
        sMon = Format(DateSerial(2017, 6, 10), "mmm")
        sUsDt = Replace(sUsDt, "JUN", sMon)

    ElseIf sUsDt Like "*JUL*" Then
        sMon = Format(DateSerial(2017, 7, 10), "mmm")
        sUsDt = Replace(sUsDt, "JUL", sMon)

    ElseIf sUsDt Like "*AUG*" Then
        sMon = Format(DateSerial(2017, 8, 10), "mmm")
        sUsDt = Replace(sUsDt, "AUG", sMon)

    ElseIf sUsDt Like "*DEC*" Then
        sMon = Format(DateSerial(2017, 12, 10), "mmm")
        sUsDt = Replace(sUsDt, "DEC", sMon)
    End If

    'in case of error, return 1/1/1900
    cvtUsDt = 0
    On Error Resume Next

    cvtUsDt = CDate(sUsDt)
End Function
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47099736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档