У меня есть столбец на моем листе, столбец F, который полон дат. Теперь мне нужно, чтобы эти даты были в формате «дд, мм, гггг», но иногда они бывают в текстовом виде, в американском / армянском формате в исходных данных. Почему я применяю макрос для преобразования его в правильный формат, иногда он переключает даты и месяцы, но если я делаю это вручную, такой ошибки не возникает.

Я использую значения вставки, чтобы получить данные в моем листе, и это мой код. Он показывает правильный месяц для формата дд / ммм / гггг, но переключает месяцы и дату.

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, дата 9 января 2009 года в формате 01.09.2009.

Когда я делаю текст в столбцах, он оставляет дату как 01.09.2009.

Когда я повторяю текст в колонках (не внося никаких изменений), он меняет дату (не формат) на 1 сентября 2009 года.

Кто-нибудь знает, почему это происходит? Если я делаю текст в столбцы вручную, я могу повторять его весь день, оставаясь в том формате, который мне нравится.

Проблема возникает только если я повторяю макрос, я не уверен, что я делаю неправильно. Попытался изменить fieldinfo на массив (array (1,4) безрезультатно.

Надеюсь, кто-то может помочь.

2 ответа2

0

Вам необходимо установить тип данных в вашем аргументе FieldInfo

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

не имеют 4 столбца, поэтому я использую массив 1

затем передайте FieldInfoVal после FieldInfo:=

Вы можете обойтись без переменной с помощью

FieldInfo:=Array(0, xlDMYFormat)

Я думаю, что массив основан на 1, поэтому он будет игнорировать 0-й член, я только что положил в ноль.

Любой подход должен работать, я думаю.

0

Я скомпилировал этот кусок кода, и он сделал работу для меня.

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  

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .