Macro do Excel 2010 para forçar “F2” + “Enter” no intervalo de células
Espero que alguém possa ajudar!
Eu tenho uma planilha do Excel 2010 que possui macros configuradas para copiar dados de outras planilhas em um formato específico em outra planilha para uso com outros processos. Os dados dos quais preciso copiar estão ok, mas tenho um problema com a formatação de intervalos de células que contêm valores de data ou hora. Os dados se originam de uma extração de banco de dados e tudo está no formato de texto. Na minha planilha, quando copio a data em (via procedimentos de código VBA), aplico o formato exigido, que é"yyyy-mm-dd"
para datas e"hh:mm.ss.ss"
para os tempos.
Como nunca trabalhamos com uma quantidade fixa de linhas, defini o código vba para aplicar a formatação ao intervalo de células, por exemplo:
AssDateLastRow = shAss.Range("C" & Rows.Count).End(xlUp).Row
shAss.Range("C4:C" & AssDateLastRow).NumberFormat = "yyyy-mm-dd"
E isso funciona ok, até agora! Por alguma razão, embora nem todas as células do intervalo tenham o formato correto aplicado, elas aparecerão como15/04/2014
não2014-04-15
. Se eu for selecionar manualmente a célula e pressionar oF2 entãoENTRAR teclas o formato aparece conforme eu preciso. Isso acontece aleatoriamente no intervalo e pode haver milhares de linhas; portanto, não é prático arrastar embora a planilha seja pressionada manualmenteF2+ENTRAR em cada um.
Procurei ajuda na internet e encontrei o que acredito que deveria fazer automaticamente oF2+ENTRAR pouco com codificação vba, mas não está funcionando e não consigo entender o porquê (sou iniciante no VBA!)
O código que uma pasta abaixo é o que eu tenho até agora, é extraído de um conjunto maior de linhas de código, então odim
etc estão mais adiante na cópia real, mas isso deve mostrar o modo como lidei com isso até agora.
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
Quando executo o código, os dados são copiados para minhas planilhas, mas as datas e horas ainda estão em um formato misto. A tentativa de forçar oF2+ENTRAR via VBA não parecia ter feito nada. Novamente, se fizer isso manualmente, funciona ok.
Abaixo está um exemplo de dados copiados dos resultados na planilha
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
Qualquer ajuda seria ótimo obrigado Dan