Macro do Excel para pesquisar e substituir datas

0

Eu tenho uma macro que deve passar por dados, procurar datas que não são reconhecidas pelo excel e alterar seu formato para que sejam mais "excelentes". Quando tento executá-lo, recebo um erro de tempo de execução '450': número incorreto de argumentos ou atribuição de propriedade inválida.

Alguém poderia pesquisar meu código e me ajudar a reconhecer o problema?

As datas estão formatadas "201611 - (novembro de 2016)" e foram importadas de um arquivo CSV.

Aqui está o meu código

Sub TestFind()
With Worksheets("Sheet1").Range("a1:a500")
    Set c = .Find("201* - (*** 201*)", LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = .Date(.Left(c.Value, 4), (.Mid(c.Value, 5, 2)), 1)
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With

End Sub
    
por Chase 15.11.2016 / 20:44

1 resposta

0

Abaixo está o código revisado.

A mudança mais significativa é a seguinte:

c.Value = .Date(.Left(c.Value, 4), (.Mid(c.Value, 5, 2)), 1)

Para isso:

c.Value = DateSerial(Left(c.Value, 4), (Mid(c.Value, 5, 2)), 1)

Observe que usei a função DateSerial para criar a data e removi os pontos ao chamar DateSerial , Left e Mid , pois são funções, não propriedades.

Aqui está a função completa:

Sub TestFind()
    With Worksheets("Sheet1").Range("a1:a500")
        Set c = .Find("201* - (*** 201*)", LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do While Not c Is Nothing
                c.Value = DateSerial(Left(c.Value, 4), (Mid(c.Value, 5, 2)), 1)
                Set c = .FindNext(c)
                If Not c Is Nothing Then
                    If c.Address = firstAddress Then Exit Do
                End If
            Loop
        End If
    End With
End Sub
    
por 16.11.2016 / 23:40