2014-03-27 22 views
0

Я создал эту подпункт с намерением принять конвенцию по умолчанию American Date, сменив ее на британский формат «yyyy-mm-dd», а затем набросив на строку. Я хочу изменить формат перед преобразованием в строку, потому что с ней проще работать с моей целью. Тем не менее, строка, похоже, сохраняется в исходном американском формате, хотя формат ячейки был изменен. Как я могу решить эту проблему и почему она это делает?формат даты в строку

Sub Changedate() 

    Sheet1.Cells(1, 3).Select 
    Selection.NumberFormat = "yyyy-mm-dd;@" 
    Sheet1.Cells(1, 4).Select 
    Selection.NumberFormat = "yyyy-mm-dd;@" 

    Dim firstDate As String 
    Dim secondDate As String 

    firstDate = Str(Sheet1.Cells(1, 3).Value) 
    secondDate = Str(Sheet1.Cells(1, 4).Value) 

    MsgBox firstDate 

    Sheet1.Cells(1, 3).Select 
    Selection.NumberFormat = "m/d/yyyy" 
    Sheet1.Cells(1, 4).Select 
    Selection.NumberFormat = "m/d/yyyy" 

End Sub 
+0

Что такое типичное значение, которое вы на самом деле ** видите ** в ячейке ....... «как форматированное» значение? –

ответ

1

Вы должны использовать:
firstDate = format(Sheet1.Cells(1, 3).Value, "yyyy-mm-dd")
дата Excel просто номер и изменение NumberFormat только влияет, как она отображается. Строка Str(), вероятно, использует формат даты по умолчанию для вашей системы, вы должны использовать Format(), чтобы заставить его.

+0

, похоже, не работает. Я пробовал это, и я получаю ошибку компиляции ... это ** должно ** работать (я смотрю в файлах справки vba и копирует и вставляет их пример для формата), но ошибка говорит «ожидаемый массив» – user1759942

+0

код I опубликованные работы для меня, вы могли бы разместить точное значение с листа (как спросил Гэри)? – avb

+0

на самом деле не мой вопрос, я только что протестировал его, прежде чем публиковать свой ответ, потому что если он сработает, я не собираюсь беспокоиться. его ошибка компиляции im, так что фактически не имеет ничего общего со значением в ячейке. хотя «фактическое» значение в ячейке, которую я установил, это '09/03/2010 ' – user1759942

1

Вы также можете попробовать использовать свойство .text вместо .value. .value получает содержимое ячеек без форматирования. поэтому вы можете неправильно отобразить строку с использованием .value. .text получает содержимое ячейки с форматирование (просмотр времени выполнения, если он запущен в цикле, может занять много времени.) .text - это самый медленный способ получения содержимого ячейки, хотя всего несколько строк или пробелов это не имеет большого значения

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