Inquiridor
.SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.delete

Pergunta
-
TENHO UMA MACRO QUE EXCLUI LINHA COM BASE EM CRITERIOS DE UMA PLANILHA! TUDO FUNCIONA NORMALMENTE SÓ QUE DEPOIS DE ALGUM TEMPO O MESMO CODIGO NÃO CONSEGUE LOCALIZAR O CRITERIO E APARECE UMA MENSAGEM DE ERRO EM TEMPO DE EXCUÇÃO 1004 DIZENDO QUE O CRITERIO NÃO FOI LOCALIZADO MAIS ELE SE ENCONTRA NA PLANILHA! ALGUÉM ME AJUDE POR FAVOR?
Todas as Respostas
-
-
Bom dia! 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, o interessante é que funciona tudo normalmente só que depois de algum tempo usando o código ele falha e aparece a mensagm de erro em tempo de execução 1004, "nenhuma celula foi encontrada" Uma obs. que esquece de relatar e que isso foi idetificado por min ainda na plataforma do vba é muito estranho a macro estava funcionando corretamente, ai fui utilizar outras planilhas! mas não fechei a plataforma do vba! quando fui testar novamente a macro a mensagem de erro apareceu! Apartir dai fiquei tentando resolver o problema, para ver o que é que fazia com isso acontece! Foram duas semanas sem sucesso! mais consegui observar alguns fatores o 1º é que o erro ocorre quase todas as vezes em que eu abro planilha e deixo a plataforma vba aberta! ele pode ocorrer em outros eventos mais identifiquei ele neste! apartir dai eu testo a macro e ela funciona após algum tempo ela aparece a mensagem de erro! 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 se após também algum tempo ela pode 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 pesuisa existe na planilha e mesmo assim a parece essa mensagem de erro1
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 With2º 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 SubCom o problema ocorrendo no código citado inicialmente! testei esse dois e para minha supresa eles funcionaram! mas decide testar mais algumas vezes durante uns dois dias! mas eles também falharam o interessante e que esses falham com menos frequencia!! durante os testes só teve uma vez!
Já declarei os dados para ver se era isso que causava o erro mais sem sucesso!
dim x as date
x = DTPicker1
Meu nome Gênises trabalho com o excel a três anos e com o vba a 1 ano!
Obrigado pela sua atenção André Santo ! Obrigado mesmo!
o erro contece nesta linha!!! no código descrito no inicio!
.SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.clear
- Editado Gênises quarta-feira, 24 de fevereiro de 2016 12:08
-
-
-
Workbooks("tester.xlsm").Activate
Sheets(1).Select
Dim COL As Variant, WOLD As Variant
Dim x As Date
x = DTPicker1
Dim CONFIRMAR As Variant
CONFIRMAR = MsgBox("Deseja confirmar?", vbYesNo + vbQuestion, "SISTEMA EM VBA!")
If CONFIRMAR = vbYes Then
'On Error GoTo trataErro
Let COL = "A"
If Len(COL) > 0 And Not COL Like "*[!0-9]*" Then COL = Val(COL)
Let WOLD = DTPicker1
With Columns(COL)
Workbooks("tester.xlsm").Activate
On Error GoTo trataErro 'Inicia tratamento de erro
.Replace WOLD, "#N/A", xlWhole
.SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Clear
End With
Exit Sub
trataErro:
MsgBox ("Ocorreu um erro em tempo de execução 1004 nenhuma célula foi encontrada!"), vbCritical
Else
End IfO estranho é que o critério se encontra na planilha!
- Editado Gênises segunda-feira, 7 de março de 2016 13:29
- Mesclado Felipe Costa GualbertoMVP, Moderator quinta-feira, 10 de março de 2016 20:46 Repetição
-
Workbooks("tester.xlsm").Activate
Sheets(1).Select
Dim COL As Variant, WOLD As Variant
Dim x As Date
x = DTPicker1
Dim CONFIRMAR As Variant
CONFIRMAR = MsgBox("Deseja confirmar?", vbYesNo + vbQuestion, "SISTEMA EM VBA!")
If CONFIRMAR = vbYes Then
'On Error GoTo trataErro
Let COL = "A"
If Len(COL) > 0 And Not COL Like "*[!0-9]*" Then COL = Val(COL)
Let WOLD = DTPicker1
With Columns(COL)
Workbooks("tester.xlsm").Activate
On Error GoTo trataErro 'Inicia tratamento de erro
.Replace WOLD, "#N/A", xlWhole
.SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.Clear
End With
Exit Sub
trataErro:
MsgBox ("Ocorreu um erro em tempo de execução 1004 nenhuma célula foi encontrada!"), vbCritical
Else
End IfO estranho é que o critério se encontra na planilha!
- Mesclado Felipe Costa GualbertoMVP, Moderator quinta-feira, 10 de março de 2016 21:03 Repetição
-
Olá Gênises! Favor não escrever a dúvida com letras maiúsculas.
Sobre sua dúvida, você está aplicando o método SpecialCells em um intervalo. Qual seria esse intervalo?
Em tempo: você está ciente que se não houver nenhuma célula que atenda o critério, vocÊ receberá um erro, certo?
http://www.ambienteoffice.com.br - http://www.clarian.com.br
-
Vendo o código inteiro, sugiro que use esse bloco de código no seu VBE, abra a janela de verificação imediata e execute o código abaixo passo a passo (tecla F8). É bom quebrar instruções grandes em menores para estudar erros:
Set rng = .Range("A2:A" & LR) Application.Goto rng Set rng = rng.SpecialCells(xlCellTypeVisible) Debug.Print rng Is Nothing Application.Goto rng Set rng = .EntireRow Debug.Print rng Is Nothing Application.Goto rng .Clear
http://www.ambienteoffice.com.br - http://www.clarian.com.br
-
-
-