2014-11-26 5 views
0

Я использую amacro для преобразования txt-файлов в xls, но у меня есть проблема, что поля с датами не преобразуются в правильном формате. Например, у меня есть дата 4/11/2014(dd/mm/yyyy) и когда файл преобразуется в xls я дата, указанная как это :11/4/2014.Как исправить формат даты при преобразовании текстового файла в excel?

Как я могу это исправить?

код:

Public Sub Read_TXT() 
Dim Dir_p As String, File_to_Open As String 
Dir_p = ActiveWorkbook.path 
File_to_Open = Dir(Dir_p & "\") 
While File_to_Open <> "" 
    If InStr(1, Right(File_to_Open, 3), "txt", vbTextCompare) <> 0 Then 
    Workbooks.OpenText Filename:=Dir_p & "\" & File_to_Open, _ 
     Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ 
     xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _ 
     Comma:=False, Space:=False, Other:=False, _ 
     TrailingMinusNumbers:=True 
    ActiveWorkbook.SaveAs Filename:=Dir_p & "\" & Left(File_to_Open, Len(File_to_Open) - 3) & "xlsx" _ 
     , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False 
    ActiveWorkbook.Close 
    End If 
    File_to_Open = Dir 
Wend 
End Sub 
+0

вы можете разместить код, который вы используете? Для форматирования формата даты потребуется небольшое изменение. –

+0

Я отправляю его. спасибо – user3333321

+0

В какой колонке указаны даты, когда это было выполнено? –

ответ

1

Там в два метода, которые вы можете использовать здесь, короткий путь - который не всегда работает - или длинный путь, который будет работать, но займет некоторое время, чтобы работать.

Короткий путь:

Columns("E, H, S, V, AB, AF, AJ, AL, AO, AS, AY, BE, BH").EntireColumn.NumberFormat = "dd/mm/yyyy" 

Долгий путь:

Dim bigRange As Range, rCell As Range 

'// If your data has headers, change the 1 to a 2 in all the lines below. 

Set bigRange = Union(Range("E1", Range("E" & Rows.Count).End(xlUp)), _ 
    Range("H1", Range("H" & Rows.Count).End(xlUp)), _ 
    Range("S1", Range("S" & Rows.Count).End(xlUp)), _ 
    Range("V1", Range("V" & Rows.Count).End(xlUp)), _ 
    Range("AB1", Range("AB" & Rows.Count).End(xlUp)), _ 
    Range("AF1", Range("AF" & Rows.Count).End(xlUp)), _ 
    Range("AJ1", Range("AJ" & Rows.Count).End(xlUp)), _ 
    Range("AL1", Range("AL" & Rows.Count).End(xlUp)), _ 
    Range("AO1", Range("AO" & Rows.Count).End(xlUp)), _ 
    Range("AS1", Range("AS" & Rows.Count).End(xlUp)), _ 
    Range("AY1", Range("AY" & Rows.Count).End(xlUp)), _ 
    Range("BE1", Range("BE" & Rows.Count).End(xlUp)), _ 
    Range("BH1", Range("BH" & Rows.Count).End(xlUp))) 

For Each rCell In bigRange.Cells 
    With rCell 
     .Value = Format(CDate(.Value2), "dd/mm/yyyy") 
    End With 
Next rCell 
+0

Я добавлю это в свой код (Read_TXT) или использую его в новом Sub? – user3333321

+0

Вы тоже можете это сделать технически, но если вы не знакомы с VBA, я бы посоветовал запустить это как отдельную процедуру после 'Read_TXT()' sub –

+0

, так как кажется, что он не меняет формат, но он понимайте это неправильно. ех. дата 4/11/2014, после конвертации будет показано как 11/4/2014 НО дата 28/11/2014 будет показана как 28/11/2014. – user3333321

Смежные вопросы