Vba 日期及日期;文本到列的时间

Vba 日期及日期;文本到列的时间,vba,excel,Vba,Excel,我对文本到列宏有问题 我有一个包含不同宏的Excel文件,其中一张表是用户在运行其中一个宏之前需要填写的表格。其中两个单元格是日期和时间 我需要将一个日期从一个文件复制到另一个文件,然后将日期从2016年3月19日拆分为3列,分别为日、月和年,即19、3和2016。当我记录宏时,一切正常,但当我运行宏时,日期转换为美国格式,我得到3、19和2016。同样的情况也适用于时间,例如15:30,录制宏时我得到15和30,但运行宏时我得到3和30 以下是我使用的代码: Sub Reporting_Sta

我对文本到列宏有问题

我有一个包含不同宏的Excel文件,其中一张表是用户在运行其中一个宏之前需要填写的表格。其中两个单元格是日期和时间

我需要将一个日期从一个文件复制到另一个文件,然后将日期从2016年3月19日拆分为3列,分别为日、月和年,即19、3和2016。当我记录宏时,一切正常,但当我运行宏时,日期转换为美国格式,我得到3、19和2016。同样的情况也适用于时间,例如15:30,录制宏时我得到15和30,但运行宏时我得到3和30

以下是我使用的代码:

Sub Reporting_Start_Date()

Application.Workbooks(1).Activate
Sheets("Activity Info").Select
Range("C8").Select
Selection.Copy
Application.Workbooks(2).Activate
Range("O2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

Selection.NumberFormat = "m/d/yyyy"
Selection.TextToColumns Destination:=Range("O2"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
    TrailingMinusNumbers:=True
Selection.NumberFormat = "0"

End Sub
记录的时间宏为:

Sub Reporting_Start_Time()

Application.Workbooks(1).Activate
Sheets("Activity Info").Select
Range("C9").Select
Selection.Copy
Application.Workbooks(2).Activate
Range("R2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

Selection.NumberFormat = "[$-F400]h:mm:ss AM/PM"
Selection.TextToColumns Destination:=Range("R2"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
    :=":", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 9)), _
    TrailingMinusNumbers:=True
Selection.NumberFormat = "0"

End Sub

假设我们有一个日期为dd/mm/yyyy格式的单元格。选择它并运行:

Sub DateSplitter()
    Dim ary
    With Selection
        ary = Split(.Text, "/")
        .Offset(0, 1) = ary(o)
        .Offset(0, 2) = ary(1)
        .Offset(0, 3) = ary(2)
    End With
End Sub


您可以为时间编写类似的代码。代码可以很容易地修改,以处理列中的所有日期或时间等。

优秀的解决方案由@Gary的学生成员提供。与此类似,下面的方法允许将包含日、月和年的整个数组一次粘贴到范围(“A1:C1”):


这将使成绩略有提高。

@Gary的学生,非常感谢你,你是个明星。花了两天的时间尝试编写和搜索宏,这将完全符合我的需要。时间格式也可以工作,尽管我需要A-C列中的所有内容,但对代码做了一些更改,但它工作得非常完美。
Sub TestDateParsing()
    Range("A1:C1") = ParseDateDDMM("16/03/2016")
End Sub

Function ParseDateDDMM(DateDDMM As String) As String()
    ParseDateDDMM = Split(DateDDMM, "/")
End Function