Bom dia,
Tenho uma macro que exclui linha com base em critérios de uma planilha. Tudo funciona normalmente, só que depois de algum tempo o mesmo código não consegue localizar o critério e aparece uma mensagem de erro em tempo de execução "1004" dizendo que
o critério não foi localizado com a seguinte mensagem "nenhuma celula foi encontrada".
O interessante é que ele se encontra na planílha.
O código é esse:
Sheets("PLAN1").Select
Let col = "A"
If Len(col) > 0 And Not col Like "*[!0-9]*" Then col
= Val(col)
Let wold = DTPicker1.Value
With Columns(col)
.Replace wold, "#N/A", xlWhole
.SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Clear
End With
Eu tenho um userform que possui um controle DTPicker1 que serve como critério para apagar a linha. Uma observação que esqueci de relatar é que isso foi identificado por min ainda na plataforma do VBA. É muito estranho a macro estava funcionando corretamente,
então fui utilizar outras planilhas, mas não fechei a plataforma do vba. Quando fui testar novamente a macro, a mensagem de erro apareceu.
Apartir daí fiquei tentando resolver o problema, para ver o que é que fazia com que isso acontecesse. Foram duas semanas sem sucesso, mas consegui observar alguns fatores:
1º O erro ocorre quase todas as vezes em que eu abro a planilha e deixo a plataforma vba aberta. Talvez ele possa ocorrer em outros eventos também. A partir daí eu consigo testar a macro por um tempo até que a mensagem de erro apareça.
2º Esse erro fica permanente, só desaparece quando fecho e abro a planilha novamente.
3º Com o erro em ação eu inseri um CommandButton na planilha para chamar o userform e
para minha supresa a macro funcionou. Não sei se após também algum tempo ela poderá falhar do mesmo jeito.
4º Quando o problema ativo tentei abrir uma outra planilha que também possui a mesma função. a função da outra também falhou.
5º O mais curioso é que o critério para a pesquisa existe na planilha e mesmo assim aparece essa mensagem de erro.
6º Tentei mudar o código, fiz o teste com mais dois códigos. O 1º tem a mesma função mais utiliza o filtro.
Sheets("PLAN1").Select
Dim LR As Long
With ActiveSheet
.UsedRange.AutoFilter Field:=1, Criteria1:=DTPicker1.Value
LR = .Cells(.Rows.Count,
2).End(xlWhole).Row
If LR = 1
Then GoTo vazaí
'.Range("A2:A" & LR).SpecialCells(xlCellTypeVisible).
_
'EntireRow.Clear
.Range("A2:A" & LR).SpecialCells(xlCellTypeVisible).EntireRow.Clear
vazaí:
.AutoFilterMode = False
End With
2º CÓDIGO
Sheets("plan1").Select
Dim criterio As Date
criterio = DTPicker1
Dim lRow As Long
Dim lLast As Long
lLast = Plan1.UsedRange.Rows.Count
For lRow = lLast To 2 Step -1
If Plan1.Cells(lRow, "A") =
criterio Then
Rows(lRow).Clear
End If
Next lRow
Exit Sub
Com o problema ocorrendo no código citado inicialmente, testei esse dois e para minha supresa eles funcionaram. Porém decidi testar
mais algumas vezes durante uns dois dias, mas eles também falharam. O interessante é que estes falham com menos frequencia. Durante os testes a falha somente ocorreu uma vez.
Já declarei os dados para ver se era isso que causava o erro, mas sem sucesso.
dim x as date
x = DTPicker1
A mensagem de erro é essa!
erro em tempo de execução '1004': Nenhuma célula foi encontrada.
Álguém me ajude por favor!!
A versão do vba é do excel 2007