Ir para conteúdo
Fórum Script Brasil
  • 0

Msg de erro no AutoFilter


Kleine Maus

Pergunta

Boa tarde galera

esse é meu primeiro tópico aqui espero que alguém possa me ajudar.

Eu tenho uma macro para Excel e nela eu fiz uma busca.

Essa busca consiste em 3 sheets, a primeira tem um textbox e um botão, a segunda é uma base de dados e a terceira é onde exibe o resultado da busca.

É um sistema simples onde o que a pessoa digita no txtbox a macro cria um filtro em determinada coluna da bade de dados e com o que foi digitado ela filtra e joga as informações filtradas na terceira sheet.

Bem o meu programa roda normalmente mas tem vezes que ocorre da pessoa que faz a busca acaba digitando o nome errado no txtbox, com isso quando a macro vai fazer o filtro e acaba não achando a palavra ela depura.

Eu gostaria de saber como eu posso fazer para ao invés de depurar ela exiba uma msg de erro infomando que a palavra digitada não consta na base de dados.

Esta é a parte do comando onde eu preciso deste auxílio

Dim varTODOS As String
    
        varTODOS = txtBusca.Value
            Range("PBT!D:D").AutoFilter Field:=1, Criteria1:=varTODOS, Operator:=xlAnd

Agradeço a quem possa me ajudar.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Escreva um trecho de código para tratar o erro.

Algo assim:

'* No inicio da rotina

On Error Goto TrataErro

(rotina aqui...)

'* No final da rotina

TrataErro:

If Err.Number = X Then

Msgbox "Erro na digitação de Y", vbInformation, "Erro na digitação"

Exit Sub

End If

Onde X é o número do erro que aparece na mensagem que interrompe a execução da macro e Y é o campo dos valores filtrados.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Nelson

vou tentar aqui e já edito para dizer se funcionou

mesmo assim muito obrigado.

edit.

Nelson está funcionando sim, quando algo é digitado que não contem na coluna, mas está aparecendo também quando digitado algo que contem na coluna.

O que eu faço ?

Código

Sub MacroGRUPO()
             On Error GoTo TrataErro
    Dim varGRUPO As String
    
        varGRUPO = Range("Capa!R1").Value

            Range("PBT!D:D").AutoFilter Field:=1, Criteria1:="=*" & varGRUPO & "*", Operator:=xlAnd
            Range("PBT!A3:BJ40000").Copy
            Range("Dados!A3").PasteSpecial
            Range("PBT!D:D").AutoFilter
            Range("Capa!U2").Select
            ActiveSheet.PivotTables("Tabela Dinâmica Grupo Econômico").PivotCache.Refresh
            Range("A1").Select
TrataErro:

If Err.Number = X Then
MsgBox "Erro na digitação", vbInformation, "Erro na digitação"
End
Exit Sub
End If
            
End Sub

Vlw de novo

Editado por Kleine Maus
Link para o comentário
Compartilhar em outros sites

  • 0

Quando você executava a macro sem o tratamento de erro surgia uma mensagem dizendo que havia ocorrido um erro, correto?

Nessa mensagem é exibida o número do erro.

O "X" do trecho abaixo é para ser substituido por esse número que aparece na mensagem.

"Traduzindo" o código abaixo, ele diz algo assim: "Se o número do erro for X, exibir mensagem".

If Err.Number = X Then <-- Substituir X pelo número do erro.

MsgBox "Erro na digitação", vbInformation, "Erro na digitação"

End If

Exit Sub

Para gerar novamente a mensagem de erro, comente a linha inicial com uma aspa simples. Depois de obter o número de erro e substituir o X, retire a aspa simples.

Assim:

' On Error GoTo TrataErro

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpa Nelson mas não conseguir entender o que você quis dizer.

Bem sem esse código para identifiar o erro o que acontece é que quando eu clico no botão de busca a macro faz um filtro em uma coluna e com o que estiver numa celula ele ele faz o filtro.

O programa roda normalmente sem problemas, mas se a célula tiver uma palavra que não tem na coluna a macro depura

Erro em tempo de execução '308':
Não foi possível definir a propriedade ListIndex. Valor de propriedade inválido
Quando termina o macro da sequência a minha programação que é a seguinte
Private Sub cmdGRUPO_Click()

    cbxGRUPO.Enabled = True
    cmdCONFIRMAR.Enabled = True
    Geconomico = txtGRUPO.Text
    cmdPesquisar.Enabled = True

        Range("Capa!S5").Value = "Desativado"
    
            If Geconomico = "" Then
                MsgBox " Digite o Grupo Econômico "
    
            Else
                UCase (Geconomico)
                Range("Capa!R1") = Geconomico
                    Call Módulo1.MacroGRUPO
                                        
                    
                        cbxGRUPO.Clear
                        Range("Capa!AB1").Select
                        Preencher = True
                            Do While Preencher = True
                                ActiveCell.Offset(1, 0).Select
                                If ActiveCell.Value = vbNullString Then
                                    Preencher = False
                                Else
                                    cbxGRUPO.AddItem ActiveCell.Value
                                End If
                            Loop
                                cbxGRUPO.ListIndex = 0
                                    Range("Capa!A1").Select
        
            End If
            
End Sub
Sub MacroGRUPO()
'On Error GoTo TrataErro
    Dim varGRUPO As String
    
        varGRUPO = Range("Capa!R1").Value
            Range("PBT!D:D").AutoFilter Field:=1, Criteria1:="=*" & varGRUPO & "*", Operator:=xlAnd
            Range("PBT!A3:BJ40000").Copy
            Range("Dados!A3").PasteSpecial
            Range("PBT!D:D").AutoFilter
            Range("Capa!U2").Select
            ActiveSheet.PivotTables("Tabela Dinâmica Grupo Econômico").PivotCache.Refresh
            Range("A1").Select

'TrataErro:
'            If Err.Number = X Then
'                MsgBox "Erro na digitação", vbInformation, "Erro na digitação"
'                End
'                Exit Sub
'            End If


End Sub

Quando eu ativo o tratamento do erro, ele manda a msg caso o que tenha na célula não contenha na coluna e exibe a msg Erro na digitação, mas ele também exibe a msg se a célular tiver um conteúdo que contenha na coluna.

Ou seja ele ta parando o programa mesmo se a célula estiver com um valor válido ou não.

Espero ter sido o mais detalhado possível.

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0
Sub MacroGRUPO()

    On Error GoTo TrataErro

    Dim varGRUPO As String
    
    varGRUPO = Range("Capa!R1").Value
    Range("PBT!D:D").AutoFilter Field:=1, Criteria1:="=*" & varGRUPO & "*", Operator:=xlAnd
    Range("PBT!A3:BJ40000").Copy
    Range("Dados!A3").PasteSpecial
    Range("PBT!D:D").AutoFilter
    Range("Capa!U2").Select
    ActiveSheet.PivotTables("Tabela Dinâmica Grupo Econômico").PivotCache.Refresh
    Range("A1").Select

TrataErro:
            
    If Err.Number = 308 Then    '* <-- Numero do erro aqui.
        MsgBox "Erro na digitação", vbInformation, "Erro na digitação"
        Exit Sub
    End If


End Sub

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...