Макрос Excel 2010 для принудительного «F2» + «Enter» в диапазоне ячеек
надеюсь, кто-то может помочь!
У меня есть лист Excel 2010, в котором есть макросы, настроенные для копирования данных из других листов в определенный формат на другом листе для использования с другими процессами. Мне нужно скопировать данные, но у меня есть проблема с форматированием диапазонов ячеек, которые содержат значения даты или времени. Данные происходят из экстракта базы данных, и все в текстовом формате. В своем рабочем листе, когда я копирую дату в (с помощью процедур кода VBA), я применяю требуемый формат, который"yyyy-mm-dd"
для дат и"hh:mm.ss.ss"
для времен.
Не существует фиксированного количества строк, с которыми мы работаем, поэтому я настроил код vba, чтобы применить форматирование к диапазону ячеек, например:
AssDateLastRow = shAss.Range("C" & Rows.Count).End(xlUp).Row
shAss.Range("C4:C" & AssDateLastRow).NumberFormat = "yyyy-mm-dd"
И это работает хорошо, пока! По какой-то причине, хотя не все ячейки в диапазоне имеют правильный формат, они будут отображаться как15/04/2014
не2014-04-15
, Если я иду вручную, выберите ячейку и нажмитеF2 затемВОЙТИ ключи формат отображается как мне нужно. Это происходит случайным образом по всему диапазону, и может быть тысячи строк, поэтому нецелесообразно тралить, хотя лист вручную нажимаетF2+ВОЙТИ на каждом.
Я просмотрел справку в Интернете и нашел то, что, по моему мнению, должно автоматическиF2+ВОЙТИ немного с кодировкой VBA, но это не работает, и я не могу понять, почему (я новичок в VBA!)
Код, вставленный ниже, - это то, что у меня есть, он извлечен из большего набора строк кода, поэтомуdim
утверждения и т. д. находятся далее в фактической копии, но это должно показать способ, которым я до сих пор занимался.
Dim shAss As Worksheet
Dim AssDateLastRow As Long
Dim c As Range
'enter method to format 'Date Craftperson Assigned' and 'Time Craftperson Assigned' in Assignments sheet
'column "C" and "D", to formats required by Archibus: date "yyyy-mm-dd", time "hh:mm.ss.ss"
AssDateLastRow = shAss.Range("C" & Rows.Count).End(xlUp).Row
shAss.Range("C4:C" & AssDateLastRow).NumberFormat = "yyyy-mm-dd"
'ensure format is applied by forcing F2 edit of cell
For Each c In shAss.Range("C4:C" & AssDateLastRow).Cells
c.Select
SendKeys "{F2}", True
SendKeys "{ENTER}", True
'Selection.NumberFormat = "yyyy-mm-dd"
Next
Когда я запускаю код, данные копируются в мои таблицы, но даты и время все еще находятся в смешанном формате. Попытка принужденияF2+ВОЙТИ через VBA, похоже, ничего не сделал. Опять же, если сделать это вручную, это работает нормально.
Ниже приведен пример данных, скопированных из результатов на листе
Work Request Code Date Assigned Time Assigned
92926 19/05/2014 14:30.00.00
92927 19/05/2014 15:00.00.00
92928 2014-05-19 15:15.00.00
92934 2014-05-19 14:00.00.00
92527 12/05/2014 07:30
92528 12/05/2014 08:00
92804 2014-05-12 16:15
92805 2014-05-12 16:20.00.00
Любая помощь будет велика, спасибо, Дэн