运行 VBA 时月份和日期不断被切换

运行 VBA 时月份和日期不断被切换

我的表格上有一列,即 F 列,其中全是日期。现在我需要这些日期采用“dd,mm,yyyy”格式,但有时原始数据中的日期是文本形式,即美国/亚美尼亚格式。为什么我应用宏将其转换为正确的格式,它有时会切换日期和月份,但如果我手动执行,则不会发生此类错误。

我使用粘贴值来获取工作表中的数据,这是我的代码。它显示了 dd/mmm/yyyy 格式的正确月份,但切换了月份和日期。

Range("F2").Select
    Range(Selection, Selection.End(xlDown)).Select
 Selection.NumberFormat = "dd/mmm/yyyy"
    Selection.TextToColumns Destination:=Range("F2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
 Selection.NumberFormat = "dd/mm/yyyy"

以单元格 F2 为例,日期为 2009 年 1 月 9 日,格式为 09/01/2009。

当我将文本分列时,日期显示为 2009/09/01。

当我将文本重复到列(不做任何更改)时,它会将日期(而不是格式)更改为 2009 年 9 月 1 日。

有人知道为什么会这样吗?如果我手动将文本分列,我可以整天重复此操作,并且它会保持我喜欢的格式。

只有在重复执行宏时才会出现此问题,我不确定我做错了什么。尝试将 fieldinfo 更改为 array(array(1,4),但无济于事。

希望有人可以帮忙。

答案1

您需要在 FieldInfo 参数中设置数据类型

Redim FieldInfoVal(1 To 1) 
FieldInfoVal(1) = xlDMYFormat

没有 4 列,所以我使用 1 个数组

然后在 FieldInfo:= 之后传入 FieldInfoVal

您可以使用以下方法省去变量

FieldInfo:=Array(0, xlDMYFormat)

我认为数组是基于 1 的,所以它会忽略第 0 个成员,我只是输入了一个零。

我认为两种方法都可以。

答案2

我编译了这段代码,它为我完成了一项工作。

Sub FormatDate()

Application.ScreenUpdating = False
With Range("A2", Range("A" & Rows.Count).End(xlUp))
.EntireColumn.Insert
.NumberFormat = "@"
With .Offset(, -1)
.FormulaR1C1 = "=Text(RC[1],""dd/mm/yy"")"
.Offset(, 1).Value = .Value
.EntireColumn.Delete
End With
End With
Application.ScreenUpdating = True

Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 4)

End Sub  

相关内容