none
.SpecialCells(xlCellTypeConstants, xlErrors).EntireRow.delete RRS feed

  • 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?
    sábado, 20 de fevereiro de 2016 12:08

Todas as Respostas

  • Pode postar o código aqui e dizer em qual linha acontece o erro ?

    André Santo | basevba.wordpress.com

    sábado, 20 de fevereiro de 2016 22:02
  • 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 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! 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
    segunda-feira, 22 de fevereiro de 2016 12:47
  • A versão é excel vba 2007
    segunda-feira, 22 de fevereiro de 2016 12:58
  • Bom dia André o código é esse!!
    segunda-feira, 7 de março de 2016 10:09
  • 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 If

    O estranho é que o critério se encontra na planilha! 

     
    segunda-feira, 7 de março de 2016 13:28
  • 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 If

    O estranho é que o critério se encontra na planilha! 

    quarta-feira, 9 de março de 2016 09:57
  • 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

    quinta-feira, 10 de março de 2016 20:27
    Moderador
  • 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

    quinta-feira, 10 de março de 2016 20:31
    Moderador
  • Bom dia amigo obrigado pela ajuda! Certo! o estranho é que o critério se encontra na planilha! e mesmo assim apresenta essa mensagem de erro! o intervalo é na coluna "A"
    • Editado Gênises segunda-feira, 14 de março de 2016 15:27
    sexta-feira, 11 de março de 2016 09:57
  • Bom dia amigo obrigado pela ajuda! Certo! o estranho é que o critério se encontra na planilha! e mesmo assim apresenta essa mensagem de erro! o intervalo é na coluna "A"
    • Editado Gênises sexta-feira, 11 de março de 2016 10:10
    sexta-feira, 11 de março de 2016 10:00
  • Bom dia amigo obrigado pela ajuda! o seu código apresenta a seguinte mensagem de erro! "erro de compilação referencia invalida ou não qualificada" nos seguintes trechos do código      

    'Set Rng = .Range("A2:A" & LR)
    Set Rng = .EntireRow
    .Clear




    sexta-feira, 11 de março de 2016 10:09