Макрос 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

Любая помощь будет велика, спасибо, Дэн

Ответы на вопрос(10)

Ваш ответ на вопрос