Notifications
Clear all

INCLUINDO MENSAGEM DE ERRO

11 Posts
3 Usuários
0 Reactions
2,031 Visualizações
(@goiko)
Posts: 0
New Member
Topic starter
 

Prezados, Bom Dia!

estou com um pequeno problema em minha macro, não consigo incluir uma mensagem de erro para quando o usuário digitar um código não cadastrado na TextBox1, ele me mostre "código não cadastrado"

alguém poderia verificar minha planilha e me ajudar?

deixei 2 códigos cadastrados para verem o funcionamento da planilha, (2459 e 1825)

segue planilha em anexo.

 
Postado : 19/01/2017 7:07 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia goiko,

Localiza essa linha:

    'Localiza um registro sem o looping pelo método find
    linha = Sheets("PROCEDIMENTO").Range("A:A").Find(codigo).Row

e insere isso abaixo:

    If linha = 0 Then
        For i = 2 To 8
            Me.Controls("TextBox" & i).Value = Empty
        Next i
        MsgBox "código não cadastrado"
        Exit Sub
    End If

Qualquer coisa da o grito.
Abraço

 
Postado : 19/01/2017 7:47 am
(@goiko)
Posts: 0
New Member
Topic starter
 

Bernardo,

muito obrigado, ficou perfeito.

gostaria de tirar mais uma duvida se possivel.

quando eu faço a consulta nao sei se vc reparou, mas a planilha salta para a linha do codigo e joga o cursor para ultima coluna da tabela, e possivel apos a consulta do cogido o vba sempre manter selecionado a celula "A1"?

 
Postado : 19/01/2017 8:25 am
(@skulden)
Posts: 0
New Member
 

Bernardo,

muito obrigado, ficou perfeito.

gostaria de tirar mais uma duvida se possivel.

quando eu faço a consulta nao sei se vc reparou, mas a planilha salta para a linha do codigo e joga o cursor para ultima coluna da tabela, e possivel apos a consulta do cogido o vba sempre manter selecionado a celula "A1"?

Você pode, antes de todo o procedimento, mandar ele selecionar a célula A1 e depois, para o restante do código acrescentar:


Application.Screenupdating = False

... código ...

Application.Screenupdating = True

End Sub

 
Postado : 19/01/2017 8:29 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Troca o código por esse:

Private Sub textbox1_afterupdate()
Dim WsFind  As Worksheet
Dim linha   As Long
Dim i       As Long
On Error Resume Next
    
    Application.ScreenUpdating = False
    Set WsFind = ThisWorkbook.Worksheets("PROCEDIMENTO")
    
    'Localiza um registro sem o looping pelo método find
    linha = WsFind.Range("A:A").Find(Me.textbox1.Text).Row
    
    If linha = 0 Then
        For i = 2 To 8
            Me.Controls("TextBox" & i).Value = Empty
        Next i
        
        Call Imagem(False)
        
        MsgBox "código não cadastrado"
    Else
        For i = 2 To 8
            Me.Controls("TextBox" & i).Value = WsFind.Cells(linha, i).Value
        Next i
    
        Call carrega_foto
        Call carrega_foto2
        Call carrega_foto3
        Call carrega_foto4
        Call carrega_foto5
        Call Imagem(True)
    End If
    
    
    TextBox4.SetFocus
    WsFind.Cells(1, 1).Select
    
    Set WsFind = Nothing
    Application.ScreenUpdating = True
    
End Sub

Sub Imagem(ByRef Status As Boolean)
        Me.CommandButton1.Enabled = Status
        Me.Busca_imagem.Enabled = Status
        Me.Busca_imagem2.Enabled = Status
        Me.Busca_imagem3.Enabled = Status
        Me.Busca_imagem4.Enabled = Status
        Me.Busca_imagem5.Enabled = Status
End Sub

Qualquer coisa da o grito.
Abraço

 
Postado : 19/01/2017 8:42 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bernardo,

muito obrigado, ficou perfeito.

gostaria de tirar mais uma duvida se possivel.

quando eu faço a consulta nao sei se vc reparou, mas a planilha salta para a linha do codigo e joga o cursor para ultima coluna da tabela, e possivel apos a consulta do cogido o vba sempre manter selecionado a celula "A1"?

Você pode, antes de todo o procedimento, mandar ele selecionar a célula A1 e depois, para o restante do código acrescentar:


Application.Screenupdating = False

... código ...

Application.Screenupdating = True

End Sub

skulden, o ScreenUpdating somente desativa a atualização da tela, mas ao finalizar o código, como estará habilitando ele novamente, vai continuar mostrando a última célula.

O problema está nas Sub's "carrega_foto..." Elas tem "Select"
É só selecionar a célula A1 ao final do código.

Qualquer coisa da o grito.
Abraço

 
Postado : 19/01/2017 8:49 am
(@goiko)
Posts: 0
New Member
Topic starter
 

Bernardo,

ficou perfeito, muito obrigado pela ajuda.

 
Postado : 19/01/2017 10:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

;)

 
Postado : 19/01/2017 10:12 am
(@goiko)
Posts: 0
New Member
Topic starter
 

bernado, Boa Tarde!

desculpe te aberto o topico denovo, eu te mandei uma mensagem mas meu navegador apareceu como erro, entao nao sei se a mesnsagem foi..

estava olhando a planilha e acabei percebem uma coisa, quando eu faço a pesquisa 1 ela esta puxando 1825, ou seja esta trazendo a referencia aproximada.

é possivel trazer a exata?

 
Postado : 19/01/2017 11:44 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde goikotcheia,

Localiza essa linha:

linha = WsFind.Range("A:A").Find(Me.textbox1.Text).Row

E substitua por essa:

linha = WsFind.Range("A:A").Find(Me.textbox1.Text, LookAt:=1).Row

Qualquer coisa da o grito.
Abraço

 
Postado : 19/01/2017 12:01 pm
(@goiko)
Posts: 0
New Member
Topic starter
 

muito obrigado.

 
Postado : 19/01/2017 12:46 pm