2016-12-20 10 views
0

У меня возникли проблемы с копированием даты из одного файла в другой и сохранением формата (dd/mm/yyyy) при использовании vba. Прямая копия приводит к датам, которые могут быть преобразованы в формат даты в США, который изменяется на mm/dd/yyyy, и те, которые не могут (любая дата с dd> 12) меняются на строку. Я попытался сначала изменить дату на номер, а затем скопировать/вставить (с планом вернуться к дате формата после завершения копирования), но это только изменяет формат для дат с dd < = 12, даты с dd > 12 все еще встречаются как строковый формат. Кроме того, даты, которые успешно меняются на номера, как представляется, меняют формат в формате США, а затем на числовой формат, поэтому я все равно получаю неправильную дату. Странная вещь проходит эти шаги вручную (вне vba) работает отлично, я могу получить все даты в любом формате, который я хочу, и формат США никогда не появляется. Вот код, я использую:Преобразование даты в числовой формат vba

Sheets("Import").Select 
PathName = Range("B2").Value 
Filename = Range("B3").Value 
TabName = Range("B4").Value 
ControlFile = ActiveWorkbook.Name 
Workbooks.Open Filename:=PathName & Filename 
ActiveSheet.Name = TabName 
Columns("A:A").Select 
Selection.NumberFormat = "0" 
Range("A2:A200").Copy Destination:=Workbooks(ControlFile).Sheets("Import").Range("A8:A206") 

Любая помощь или предложения для вещей, чтобы попробовать было бы здорово. Cam

+0

Я подозреваю, что с помощью буфера обмена может быть проблемой. Вам нужно сохранить форматирование? – Comintern

+0

no Я могу иметь дело с форматированием, как только вы вставили, но процесс фактически изменит значение (т. Е. В электронной таблице 1 значение даты равно 42501, а после копирования значение даты - 42679 ... – user2301233

+0

Попробуйте 'Книги (ControlFile). Таблицы (« Импорт » ") .Range (" A8: A206 "). Value = Range (« A2: A200 »). Value' – Comintern

ответ

1

Я бы попробовал один из них. Я смущен тому, какой формат вам нужен.

Workbooks.Open Filename:=PathName & Filename 
ActiveSheet.Name = TabName 
Range("A2:A200").Copy Destination:=Workbooks(ControlFile).Sheets("Import").Range("A8:A206") 

'Workbooks(ControlFile).Sheets("Import").Columns("A:A").NumberFormat = "dd/mm/yy;@" 

Я уверен, что один из них будет работать

'Workbooks(ControlFile).Sheets("Import").Columns("A:A").NumberFormat = "mm/dd/yy;@" 

Если все остальное не просто запустить это после того, как ваш код и сделать его любой формат вашего искания.

Sub Change_Date() 
Dim oCell As Range 
Dim LastRow As Long 

LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 

For Each oCell In ActiveSheet.Range("A1:A" & LastRow) 
    oCell.Value = Format(Trim(oCell.Value), "dd/mm/yyyy") 
Next oCell 


End Sub 
0

Жизнь в Японии и иметь дело с странными преобразованиями даты я узнал, единственный реальный безопасный способ сохранить форматирование, как вы хотите, чтобы использовать NumberFormatLocal установить ячейку, как вам это нужно. Независимо от того, как вы форматируете дату в VBA, как только она находится в ячейке, Excel, похоже, берет на себя то, на что установлены локальные настройки.

Этот код является тем, что я хотел бы использовать в вашей ситуации, чтобы гарантировать формат, который вы хотите.

Sheets("Import").Select 
    PathName = Range("B2").Value 
    Filename = Range("B3").Value 
    TabName = Range("B4").Value 
    ControlFile = ActiveWorkbook.Name 
    Workbooks.Open Filename:=PathName & Filename 
    ActiveSheet.Name = TabName 
    Columns("A:A").Select 
    Selection.NumberFormat = "0" 
    Range("A2:A200").Copy Destination:=Workbooks(ControlFile).Sheets("Import").Range("A8:A206") 

    Workbooks(ControlFile).Sheets("Import").Range("A8:A206").NumberFormatLocal = "d/m/yyyy" 

Вы также можете использовать что-то вроде этого на сегодняшний день 1/12/2016

Range("A8:A206").NumberFormatLocal = "dd/mmm/yyyy" 

Чтобы дать вам выход,

12/Jan/2016 вместо Jan/12/2016

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