Eu tenho uma planilha que rastreia itens e datas. Cada item tem uma data correspondente associada a ele:
Captura de tela mostrando a formatação condicional:
Se a data for igual ou inferior a 100 dias a partir da data atual, a célula de data é destacada em verde, usando esta fórmula de formatação condicional:
=TODAY()-C3:C12<120
Se a data for superior a 100 dias a partir da data atual, a célula será destacada em vermelho, usando esta fórmula de formatação condicional:
=TODAY()-C3:C12>=120
Além disso, todas as linhas são classificadas por data, em ordem crescente, e as células de data em branco não produzem formatação condicional:
=ISBLANK(C3:C12)=TRUE
O problema que estou tentando resolver é que, quando uma data é atualizada para um determinado item, todas as linhas precisam ser reorganizadas dinamicamente na nova ordem crescente de data usando o código VBA.
Na captura de tela, você notará que o Item 6 está fora do lugar. Sua linha inteira deve ser movida automaticamente para a sequência correta por ordem de data, pela macro.
Eu tentei incorporar o seguinte script que encontrei online. Infelizmente, alguns comportamentos muito estranhos se seguiram e minhas linhas foram reorganizadas de uma forma que não consegui entender direito. O cabeçalho é movido pela macro abaixo de todo o resto, não importa o que eu faça!
Alguém pode ver o que há de errado com este código VBA? Isso faz uma bagunça absoluta com meus dados assim que atualizo qualquer data.
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Range("C3").Sort Key1:=Range("C12"), _
Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End Sub
Editar:
"Você não forneceu um link para o script"
Link para o script: https://www.extendoffice.com/documents/excel/3655-excel-auto-sort-by-date.html
"... e, mais importante, nos disse o que o script aleatório deveria realmente fazer"
O script deve classificar automaticamente as datas, quando inseridas ou modificadas, como pode ser inferido em:
"O problema que estou tentando resolver é que, quando uma data é atualizada para um determinado item, todas as linhas precisam ser reorganizadas dinamicamente na nova ordem crescente de data usando o código VBA ."
... e:
" Sua linha inteira deve ser movida automaticamente para a sequência correta por ordem de data, pela macro ."
Desculpe se não deixei claro o suficiente que o objetivo deste script é organizar dinamicamente as datas conforme elas são modificadas.
Aqui está o que acontece quando uma nova data é adicionada; o cabeçalho é movido abaixo dos dados:
O cabeçalho é classificado junto com os dados
Alguém pode ver por que o cabeçalho seria movido abaixo dos dados?
Resolvi meu problema modificando os valores do intervalo da seguinte maneira:
Inicialmente, eu havia referenciado apenas uma única célula, em vez de um intervalo de células, então o script acabou classificando todas as linhas, incluindo o cabeçalho. Agora funciona como pretendido.
Minha pergunta foi respondida e esta foi a resposta.