Ir ao conteúdo
  • Cadastre-se

Excel vba - incluir novo cadastro/consultar cadastro


Ir à solução Resolvido por Midori,

Posts recomendados

Prezados, boa noite. 

Alguém pode me ajudar? 

Estou cadastrando os dados dos motoristas na aba(CADASTRO MOTORISTA), gostaria de ao digitar o CPF na ABA(Ordem de carregamento), o exel retornar-se pra mim o Nome e as placas do motoristas. 

Queria vê se é possível fazer botão para:

  1. Incluir novo cadastro
  2. Consultar se já tem cadastro com base no CPF se não, apareceria o botão, realizar novo cadastro. 
  3.  

image.png

ORDEM DE CARREGAMENTO.xlsx.xlsm.zip

Link para o comentário
Compartilhar em outros sites

  • Solução

@RAIMUNDO LIMA DE ARAUJO Sua planilha pode ter os dois procedimentos. Só é preciso definir um evento para chamar cada um, pode ser por meio de um botão ou Change da planilha. O procedimento de Consulta deve ser o primeiro a ser chamado, já que se em contrar o CPF na base retornará os dados no formulário, caso contrário será o critério para cadastrar o novo registro, p.ex,

 

Sub Ordem()
    Dim PlanOrdem   As Worksheet
    Dim Registro    As Range
    Dim Tabela      As ListObject
    
    Set Tabela = ThisWorkbook.Sheets("CADASTRO MOTORISTA").[Tabela8].ListObject
    Set PlanOrdem = ThisWorkbook.Sheets("ORDEM DE CARREGAMENTO")
    Set Registro = Consulta(Tabela.ListColumns("CPF"), PlanOrdem.[C14])

    If Registro Is Nothing Then
        Call Cadastra(Tabela, _
            PlanOrdem.[C11], _
            PlanOrdem.[C14], _
            "1111111111", _
            PlanOrdem.[J11], _
            PlanOrdem.[L11], _
            PlanOrdem.[N11])
    Else
        PlanOrdem.[C11] = Registro.Offset(0, -1)
        PlanOrdem.[J11] = Registro.Offset(0, 2)
        PlanOrdem.[L11] = Registro.Offset(0, 3)
        PlanOrdem.[N11] = Registro.Offset(0, 4)
    End If
End Sub

Function Consulta(Coluna As ListColumn, Texto As String) As Range
    If Not Coluna.DataBodyRange Is Nothing Then
        Dim Registro    As Range
        
        Set Registro = Coluna.DataBodyRange.Find( _
            What:=Texto, LookIn:=xlValues, LookAt:=xlWhole)
        
        If Not Registro Is Nothing Then
            Set Consulta = Registro
        End If
    End If
End Function

Sub Cadastra(Tabela As ListObject, Nome As String, _
    CPF As String, Telefone As String, _
    Cavalo As String, Carreta1 As String, Carreta2 As String)
    Dim Linha   As ListRow
    
    Set Linha = Tabela.ListRows.Add
    Linha.Range = Array(Nome, CPF, Telefone, Cavalo, Carreta1, Carreta2)
End Sub

 

Assim você pode adaptar o código, execute a Sub Ordem para testar.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Midori

Boa noite, 

Peço ajuda novamente? 

Usei o codigo que você mandou para cadastrar deu certo, poderia me ajudar para verificar se já tem um dado cadastrado com aquele CPF? E se não tiver apare a mensagem realizar novo cadastro. 

E se possível,poderia incluir também para retornar os dados cadastrados ao digitar o CPF?

Ou seja, digitou CPF, ele retorna Nome e Placas. 

Vi que no codigo tem Consulta, mas não consegui aplicar

image.png.f90190c4752434dafcab20bc9d6980fd.png

Link para o comentário
Compartilhar em outros sites

@RAIMUNDO LIMA DE ARAUJO Para verificar o dado é com a função Consulta. Ela tem dois parâmetros, o primeiro é do campo da tabela e o segundo é o dado. Se nada for encontrado a função retorna Nothing, caso contrário retorna o range. No caso do CPF deve ser exatamente como está cadastrado, então se tiver zeros a esquerda (no formato texto) ou pontuação, a busca também deve ter.

 

Quando o resultado é encontrado você pode fazer como no código que postei que pega os deslocamentos do range na tabela, p.ex,

PlanOrdem.[C11] = Registro.Offset(0, -1)
PlanOrdem.[J11] = Registro.Offset(0, 2)
PlanOrdem.[L11] = Registro.Offset(0, 3)
PlanOrdem.[N11] = Registro.Offset(0, 4)

 

O Offset(0,-1) é o Nome, o Offset(0, 3) é a Carreta1, etc.

 

Outro exemplo de busca com a função,

Sub Teste()
    Dim Registro As Range
    
    Set Registro = Consulta([Tabela8].ListObject.ListColumns("CPF"), "00073967165")
    
    If Registro Is Nothing Then
        MsgBox "Dado não encontrado"
    Else
        MsgBox "O dado está na célula " & Registro.Address
    End If
End Sub

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!