2
respostas

Erro ao usar Replace para ajustar datas.

Boa tarde! Estava praticando os aprendizados do curso em uma planilha de registro de ponto chamada "rdo". Obtive alguns erros de sintaxe e corrigi. Quando termminei tive um resultado do qual não consigo corrigir sozinho. Segue codigo e a planilha antes de depois da macro. (obs: fiz duas versões achando que o erro era o comando replace e o troquei por um concatnar com Left + "string" + Right e o resultado foi igual)

Estou esquecendo alguma boa pratica ou conceito ? aguardo resposta

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeDo dia 1 ao 12 do mês 06 as datas trocam o mes pelo dia. e após o dia 12 elas voltam a ficar corretas.

Sub sbAjusta_mes_rdo()

Dim vLinhaMes As Long
vLinhaMes = 8

    Do While Cells(vLinhaMes, 1) <> vbNullString
            If Mid(Cells(vLinhaMes, 1), 4, 2) = "04" Then
            Cells(vLinhaMes, 1) = Replace(Cells(vLinhaMes, 1), "04", "05")
            Else
            Cells(vLinhaMes, 1) = Left(Cells(vLinhaMes, 1), 3) & "06" & Right(Cells(vLinhaMes, 1), 5)
            End If
            Replace
    vLinhaMes = vLinhaMes + 1
    
    Loop


End Sub




Sub sbAjusta_mes_rdo()

Dim vLinhaMes As Long
vLinhaMes = 8

    Do While Cells(vLinhaMes, 1) <> vbNullString
            If Mid(Cells(vLinhaMes, 1), 4, 2) = "04" Then
            Cells(vLinhaMes, 1) = Replace(Cells(vLinhaMes, 1), "04", "05")
            Else
            Cells(vLinhaMes, 1) = Replace(Cells(vLinhaMes, 1), "05", "06")
            End If
            Replace
    vLinhaMes = vLinhaMes + 1
    
    Loop
2 respostas

Escrevi com um pouco de sono. Agora relendo esqueci de avisar, a intenção da macro é trocar as datas fazendo com que todas subam 1 mês. Onde é quatro vai pra 5 e assim por diante. No caso o registro sempre tem uma parte de um mês e uma parte do mês seguinte.

Oii, Luis! Como vai?

O erro pode estar na forma como você está manipulando as datas. Quando o comando Replace está substituindo partes da data de forma inadequada, especialmente quando o dia ou o mês tem dois dígitos.

Como sugestão, seria interessante uma conversão das datas para o formato de date no VBA. Seguindo uma lógica de converter o valor da célula para o tipo date, depois extrair o dia, mês e ano e, para finalizar atualização da célula com a nova data. Dessa forma as datas serão manipuladas adequadamente.

Como é um projeto externo consigo apenas te orientar por não estar inserida no contexto geral. Então adeque as sugestões de acordo com a necessidade dele para realizar os ajustes e testes que forem precisos. Para te auxiliar, reuni alguns links de artigos que abordam sobre a conversão de datas no VBA:

Tipo de dados de Data Função Date

Espero que as sugestões te ajude.

Bons estudos, Luis!