Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-格式设置“;2015年2月27日星期五08:45:00 CST“;进入一个可用的日期_Vba_Excel_Date_Datetime - Fatal编程技术网

Excel VBA-格式设置“;2015年2月27日星期五08:45:00 CST“;进入一个可用的日期

Excel VBA-格式设置“;2015年2月27日星期五08:45:00 CST“;进入一个可用的日期,vba,excel,date,datetime,Vba,Excel,Date,Datetime,我目前正在为报告目的建立一个数据库。原始数据将来自自动数据源,该数据源将csv发送到共享位置。我有一些进程,这些进程先获取数据,然后将其放在共享位置,然后我有一个excel文档,该文档设置了与数据的连接,然后将连接到数据,并在打开工作簿时刷新。这个过程已经完成,但我遇到的问题是,原始数据源正在导出csv,它正在将日期格式化为“Fri Feb 27 08:45:00 CST 2015”(例如)。我需要将其转换为“MM/dd/yyyy hh:MM:ss”格式,此时更改供应商的输出格式是不可行的 任何

我目前正在为报告目的建立一个数据库。原始数据将来自自动数据源,该数据源将csv发送到共享位置。我有一些进程,这些进程先获取数据,然后将其放在共享位置,然后我有一个excel文档,该文档设置了与数据的连接,然后将连接到数据,并在打开工作簿时刷新。这个过程已经完成,但我遇到的问题是,原始数据源正在导出csv,它正在将日期格式化为“Fri Feb 27 08:45:00 CST 2015”(例如)。我需要将其转换为“MM/dd/yyyy hh:MM:ss”格式,此时更改供应商的输出格式是不可行的


任何帮助都将不胜感激,我真的不知道从哪里开始,所以我没有代码发布。我会说,这将在大量的行上完成。例如,它可能是B2:B10000,但不考虑几个时区:

Sub convertDate()

Dim str As String
Dim arr() As String
Dim mm As String
Dim convDate As String

str = "Fri Feb 27 08:45:00 CST 2015"

arr() = Split(str)

Select Case arr(1)
Case "Jan": mm = "01"
Case "Feb": mm = "02"
Case "Mar": mm = "03"
Case "Apr": mm = "04"
Case "May": mm = "05"
Case "Jun": mm = "06"
Case "Jul": mm = "07"
Case "Aug": mm = "08"
Case "Sep": mm = "09"
Case "Oct": mm = "10"
Case "Nov": mm = "11"
Case "Dec": mm = "12"
End Select

convDate = mm & "/" & arr(2) & "/" & arr(5) & " " & arr(3)

MsgBox (convDate)

End Sub

不考虑几个时区:

Sub convertDate()

Dim str As String
Dim arr() As String
Dim mm As String
Dim convDate As String

str = "Fri Feb 27 08:45:00 CST 2015"

arr() = Split(str)

Select Case arr(1)
Case "Jan": mm = "01"
Case "Feb": mm = "02"
Case "Mar": mm = "03"
Case "Apr": mm = "04"
Case "May": mm = "05"
Case "Jun": mm = "06"
Case "Jul": mm = "07"
Case "Aug": mm = "08"
Case "Sep": mm = "09"
Case "Oct": mm = "10"
Case "Nov": mm = "11"
Case "Dec": mm = "12"
End Select

convDate = mm & "/" & arr(2) & "/" & arr(5) & " " & arr(3)

MsgBox (convDate)

End Sub

假设得到的格式始终相同,则可以使用正则表达式,然后将其重新生成为日期,然后格式化:

'Requires reference to Microsoft VBScript Regular Expressions
Sub ParseDateExample()
    testValue = "Fri Feb 27 08:45:00 CST 2015"
    With New RegExp
        .Pattern = ".+\s(.+)\s(\d{1,2})\s(\d{2}:\d{2}:\d{2})\s.+(\d{4})"
        If .Test(testValue) Then
            Dim matches As Object
            Set matches = .Execute(testValue)
            Dim temp As String
            temp = matches(0).SubMatches(0) & "/" & matches(0).SubMatches(1) & "/" & _
                   matches(0).SubMatches(3) & " " & matches(0).SubMatches(2)
            If IsDate(temp) Then
                Debug.Print Format$(CDate(temp), "mm/dd/yyyy hh:nn:ss")
            End If
        End If
    End With
End Sub

假设得到的格式始终相同,则可以使用正则表达式,然后将其重新生成为日期,然后格式化:

'Requires reference to Microsoft VBScript Regular Expressions
Sub ParseDateExample()
    testValue = "Fri Feb 27 08:45:00 CST 2015"
    With New RegExp
        .Pattern = ".+\s(.+)\s(\d{1,2})\s(\d{2}:\d{2}:\d{2})\s.+(\d{4})"
        If .Test(testValue) Then
            Dim matches As Object
            Set matches = .Execute(testValue)
            Dim temp As String
            temp = matches(0).SubMatches(0) & "/" & matches(0).SubMatches(1) & "/" & _
                   matches(0).SubMatches(3) & " " & matches(0).SubMatches(2)
            If IsDate(temp) Then
                Debug.Print Format$(CDate(temp), "mm/dd/yyyy hh:nn:ss")
            End If
        End If
    End With
End Sub

请注意,任何简单的字符串操作都可能与时区相冲突。如果您所有的时间都是本地的,并且您希望将它们作为本地处理,那么这是可行的,但否则事情可能会变得糟糕。对不起,我应该说,它们都将作为本地处理,并且都是本地的。请注意,任何简单的字符串操作都可能会与时区相冲突。如果你所有的时间都是本地的,你想把它们处理成本地的,这是可行的,但否则事情会变得很糟糕。对不起,我应该说,它们都会被处理成本地的,而且都是本地的。对不起,我在我的帖子上做了一个编辑,我将不得不在大量的单元格上这样做,你认为在循环中这样做会好吗?比如可能是一个for-each或do-while?@SamL是的,你可以在一个循环中完成。太棒了,我在每个循环中都使用了这个,效果非常好!对不起,我在我的帖子上做了一个编辑,我将不得不在大量的单元格上进行编辑,你认为这在循环中是好的吗?比如可能是一个for-each或do-while?@SamL是的,你可以在一个循环中完成。太棒了,我在每个循环中都使用了这个,效果非常好!