我遇到Text to column宏的问题。
我有一个包含不同宏的Excel文件,一张表是用户在运行其中一个宏之前需要填写的表。其中两个单元格是日期和时间。
我需要将日期从一个文件复制到另一个文件,然后将日期从例如19/03/2016至3列日,月和年,即19,3和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
答案 0 :(得分:4)
假设我们有一个日期为 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
您可以编写类似时间的内容。可以轻松修改代码以处理列中的所有日期或时间等。
答案 1 :(得分:2)
会员@ Gary的学生提供了出色的解决方案。与此类似,下面的一个允许将包含Day,Month和Year的整个数组一次粘贴到Range(“A1:C1”):
Sub TestDateParsing()
Range("A1:C1") = ParseDateDDMM("16/03/2016")
End Sub
Function ParseDateDDMM(DateDDMM As String) As String()
ParseDateDDMM = Split(DateDDMM, "/")
End Function
这将导致性能略有提升。