Meses e Data continuam sendo trocados ao executar o VBA

0

Eu tenho uma coluna na minha planilha, a coluna F, que está cheia de datas. Agora eu preciso dessas datas para estar no formato "dd, mm, yyyy", mas às vezes eles estão em forma de texto, formato nos / armênio nos dados originais. Por que eu aplico uma macro para convertê-la no formato correto, ela alterna as datas e meses algumas vezes, mas se eu fizer isso manualmente, nenhum erro ocorrerá.

Estou usando os valores de colar para obter os dados na minha planilha e esse é o meu código. Ele mostra o mês correto para o formato dd / mmm / aaaa, mas alterna os meses e a data.

Range("F2").Select
    Range(Selection, Selection.End(xlDown)).Select
 Selection.NumberFormat = "dd/mmm/yyyy"
    Selection.TextToColumns Destination:=Range("F2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
 Selection.NumberFormat = "dd/mm/yyyy"

Vamos pegar a célula F2, a data é 9 de janeiro de 2009 no formato 09/01/2009.

Quando faço o meu texto em colunas, sai a data como 09/01/2009.

Quando eu repito o texto em colunas (sem fazer nenhuma alteração), ele altera a data (não o formato) para 1º de setembro de 2009.

Alguém sabe por que isso está acontecendo? Se eu fizer o texto em colunas manualmente, posso repetir o dia todo permanecendo no formato que gosto.

O problema só ocorre se eu repito a macro, não tenho certeza do que estou fazendo errado. Tentei mudar fieldinfo para array (matriz (1,4) sem sucesso.

Espero que alguém possa ajudar.

    
por Dire 09.06.2014 / 09:12

2 respostas

0

Você precisa definir o tipo de dados no seu argumento FieldInfo

Redim FieldInfoVal(1 To 1) 
FieldInfoVal(1) = xlDMYFormat

não tem 4 colunas, então estou usando uma matriz de 1

passe em FieldInfoVal após FieldInfo: =

Você pode dispensar a variável usando

FieldInfo:=Array(0, xlDMYFormat)

Eu acho que o array é baseado em 1, então ele irá ignorar o 0º membro, eu acabei de colocar em um zero.

Qualquer abordagem deve funcionar, eu acho.

    
por 18.06.2014 / 12:36
0

Eu compilei este pedaço de código e ele fez um trabalho para mim.

Sub FormatDate()

Application.ScreenUpdating = False
With Range("A2", Range("A" & Rows.Count).End(xlUp))
.EntireColumn.Insert
.NumberFormat = "@"
With .Offset(, -1)
.FormulaR1C1 = "=Text(RC[1],""dd/mm/yy"")"
.Offset(, 1).Value = .Value
.EntireColumn.Delete
End With
End With
Application.ScreenUpdating = True

Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 4)

End Sub  
    
por 02.03.2016 / 14:11