Notifications
Clear all

Rotina de pesquisa em uma planilha

5 Posts
2 Usuários
0 Reactions
877 Visualizações
(@rbtne0)
Posts: 4
New Member
Topic starter
 

Boa tarde, comecei a pouco a me aprofundar em Excel avançado e estou criando um projeto de cadastro (clientes, produtos e funcionário). Tudo está indo muito bem, porém eu notei algumas coisas que não consegui identificar de onde vem.

Na tela de clientes, por exemplo, consigo inserir, alterar e excluir e utilizei um Combobox para pesquisar entre os cadastros já realizados. Só que, ao excluir um cadastro, na planilha automaticamente, as linha adjacentes se juntam, sem deixar linhas em branco entre elas. Mas no Combobox ficam "espaços como se tivesse algum dado ali, só que está vazio.

Segue a rotina que eu criei no Combobox (lembrando que estou começando hehe)

Private Sub cmb_localizar_Click()
   'Conta o total de linhas cadastradas
   totalcliente = Worksheets("Clientes").UsedRange.Rows.Count
   
   For i = 0 To totalcliente
     If cmb_localizar.ListIndex = i Then
       txt_nome.Enabled = True
       txt_cpf.Enabled = True
       txt_end.Enabled = True
       txt_bairro.Enabled = True
       txt_cidade.Enabled = True
       txt_cep.Enabled = True
       txt_fone.Enabled = True
       txt_celular.Enabled = True
       btn_excluir.Enabled = True
       btn_alterar.Enabled = True
       btn_imprimir.Enabled = True
       btn_gravar.Enabled = False
       
       txt_nome.BackColor = &H80000005
       txt_cpf.BackColor = &H80000005
       txt_end.BackColor = &H80000005
       txt_bairro.BackColor = &H80000005
       txt_cidade.BackColor = &H80000005
       txt_cep.BackColor = &H80000005
       txt_fone.BackColor = &H80000005
       txt_celular.BackColor = &H80000005
       
     
       txt_nome = Cells(i + 2, 1)
       txt_cpf = Cells(i + 2, 2)
       txt_end = Cells(i + 2, 3)
       txt_bairro = Cells(i + 2, 4)
       txt_cidade = Cells(i + 2, 5)
       txt_cep = Cells(i + 2, 6)
       txt_fone = Cells(i + 2, 7)
       txt_celular = Cells(i + 2, 8)
       Exit Sub
     End If
   Next
End Sub

Segue a tela de como está o problema abaixo

http://oi62.tinypic.com/20zbd02.jpg

Agora na tela de fornecedores, o campo A1 aparece quando não tem nenhum cadastro

Private Sub cmb_localizar_Click()
   'Conta o total de linhas cadastradas
   totalf = Worksheets("Fornecedores").UsedRange.Rows.Count
   
   For i = 0 To totalf
     If cmb_localizar.ListIndex = i Then
       txt_nome.Enabled = True
       txt_fone.Enabled = True
       txt_end.Enabled = True
       txt_bairro.Enabled = True
       txt_cidade.Enabled = True
       txt_cep.Enabled = True
       txt_site.Enabled = True
       btn_excluir.Enabled = True
       btn_alterar.Enabled = True
       btn_imprimir.Enabled = True
       btn_gravar.Enabled = False
       
       txt_nome.BackColor = &H80000005
       txt_fone.BackColor = &H80000005
       txt_end.BackColor = &H80000005
       txt_bairro.BackColor = &H80000005
       txt_cidade.BackColor = &H80000005
       txt_cep.BackColor = &H80000005
       txt_site.BackColor = &H80000005
       
     
       txt_nome = Cells(i + 2, 1)
       txt_fone = Cells(i + 2, 2)
       txt_end = Cells(i + 2, 3)
       txt_bairro = Cells(i + 2, 4)
       txt_cidade = Cells(i + 2, 5)
       txt_cep = Cells(i + 2, 6)
       txt_site = Cells(i + 2, 7)
       Exit Sub
     End If
   Next
End Sub

UserForm

Private Sub UserForm_Initialize()
   Worksheets("Fornecedores").Select
   
   'Conta o total de linha cadastradas
   totalcliente = Worksheets("Fornecedores").UsedRange.Rows.Count

   'Código para preencher a caixa Localizar
   cmb_localizar.RowSource = "Fornecedores!a2:a" & totalcliente
End Sub
 
Postado : 26/10/2015 11:18 am
(@messiasmbm)
Posts: 223
Estimable Member
 

embaixo do ultimo comando de onde deleta a linha cole o seguinte :

cmb_localizar.Clear 'deleta tudo no combobox
UserForm_Initialize 'atualiza o combobox sem o espaço em branco
 
Postado : 26/10/2015 12:01 pm
(@rbtne0)
Posts: 4
New Member
Topic starter
 

Obrigado pelo ajuda, mas não funcionou. Ele gera um erro não identificado na linha cmb_localizar.Clear

 
Postado : 26/10/2015 12:40 pm
(@rbtne0)
Posts: 4
New Member
Topic starter
 

Identifiquei que o problema está na rotina de exclusão, onde ele exclui os dados da linha mas não a linha. Devo estar esquecendo de algum código

Segue a rotina do botão excluir

Private Sub btn_excluir_Click()
   'Variável armazena resposta sobre pergunta de exclusão
   resposta = MsgBox("Confirma exclusão do CLIENTE atual?", vbYesNo, "Excluir Cliente")
   
   If resposta = vbYes Then
     linha = cmb_localizar.ListIndex + 2
     
     Worksheets("Clientes").Rows(linha).Delete
     
     
     txt_nome = ""
     txt_cpf = ""
     txt_end = ""
     txt_bairro = ""
     txt_cidade = ""
     txt_cep = ""
     txt_fone = ""
     txt_celular = ""
     cmb_localizar = ""
      
     txt_nome.Enabled = False
     txt_cpf.Enabled = False
     txt_end.Enabled = False
     txt_bairro.Enabled = False
     txt_cidade.Enabled = False
     txt_cep.Enabled = False
     txt_fone.Enabled = False
     txt_celular.Enabled = False
     btn_gravar.Enabled = False
     btn_excluir.Enabled = False
     
     txt_nome.BackColor = &H8000000F
     txt_cpf.BackColor = &H8000000F
     txt_end.BackColor = &H8000000F
     txt_bairro.BackColor = &H8000000F
     txt_cidade.BackColor = &H8000000F
     txt_cep.BackColor = &H8000000F
     txt_fone.BackColor = &H8000000F
     txt_celular.BackColor = &H8000000F
     
     MsgBox "Cliente excluído com sucesso", vbInformation, "Cliente excluído"
   End If
   
   'Comando para salvar a planilha
   ActiveWorkbook.Save
End Sub
 
Postado : 26/10/2015 12:50 pm
(@rbtne0)
Posts: 4
New Member
Topic starter
 

Consegui resolver. Basta fazer o seguinte

Após

If resposta = vbYes Then
     linha = cmb_localizar.ListIndex + 2

Apagar

Worksheets("Clientes").Rows(linha).Delete

E implementar

'Seleciona a linha correspondente a caixa Localizar
     Worksheets("Clientes").Rows(linha).Select
     
     'Deleta toda a linha, puxando a planilha para cima
     Selection.Delete shift:=x1up
     
     'Seleciona a planilha Clientes
     Worksheets("Clientes").Select

     'Conta o total de linha cadastradas
     totalcliente = Worksheets("Clientes").UsedRange.Rows.Count

     'Preenche a caixa Localizar
     cmb_localizar.RowSource = "Clientes!a2:a" & totalcliente
 
Postado : 26/10/2015 1:09 pm