将“ dd.mm.yyyy”更改为“ mm / dd / yyyy” VBA

时间:2019-07-15 19:32:04

标签: excel vba

我知道“ dd.mm.yyyy”在Excel中未设置为日期格式,而此转换部分正是我要解决的问题。我在.cell(“ C5”)中包含“ 31.3.2019”,并希望它使用新格式“ 3/31/2019”在同一单元格内进行转换(替换)。我不断遇到“超出范围”错误,我不确定我的错误在哪里。

以下是我尝试过的内容:

Sub DivestitureTemplate_ChangeDateFormat()

Application.ScreenUpdating = False

Dim rng As Range
Dim str() As String
    Set rng = Range("C5:C3000")

With Worksheets("Divestiture Template")
For Each rng In Selection
    str = Split(rng.Value, ".")
    rng.Value = DateSerial(2000 + str(4), str(2), str(0))
Next rng
Selection.NumberFormat = "mm/dd/yyyy"

Application.ScreenUpdating = True

End With

End Sub

将(“ C5:C3000”)的格式从31.3.2019更改为3/31/2019 -可以是连续的,但是从“ C5”开始,因为这是自动报告,并且位于指定的标题下方。我想我一直在研究这个脚本,整天编写脚本,无缘无故地对此感到头疼。

1 个答案:

答案 0 :(得分:3)

要在该列中获取实际日期,请尝试:

Sub DivestitureTemplate_ChangeDateFormat()
    Dim cell As Range, rng As Range, d As Date
    Set rng = Worksheets("Divestiture Template").Range("C5:C3000")

    For Each cell In rng
        With cell
            arr = Split(.Text, ".")
            .Value = DateSerial(arr(2), arr(1), arr(0))
            .NumberFormat = "m/dd/yyyy"
        End With
    Next cell
End Sub

EDIT#1:

Sub DivestitureTemplate_ChangeDateFormat()
    Dim cell As Range, rng As Range, d As Date
    Dim arr
    Set rng = Worksheets("Divestiture Template").Range("C5:C3000")

    For Each cell In rng
        With cell
            arr = Split(.Text, ".")
            .Value = DateSerial(arr(2), arr(1), arr(0))
            .NumberFormat = "m/dd/yyyy"
        End With
    Next cell
End Sub