Notifications
Clear all

Duplo clique - ListBox

10 Posts
3 Usuários
0 Reactions
2,230 Visualizações
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Olá a todos.

Seria possível selecionar uma linha em uma ListBox com dois cliques essa linha ser tranferida de uma planilha para outra?
Minha intenção é fazer com que a linha de uma ListBox passe para outra listBox ao ser dado o duplo clique. Portanto acredito que esses dados precisem ser lançados em uma outra planilha para que possa popular a listbox.

Alguém saberia como proceder?

 
Postado : 16/04/2015 12:19 pm
(@laennder)
Posts: 62
Trusted Member
 

Veja se é isso. Não foi necessário passar os dados para outra planilha.

Laennder Alves
Microsoft MVP

 
Postado : 16/04/2015 12:41 pm
(@laennder)
Posts: 62
Trusted Member
 

Apenas para complementar.

Para evitar dar um erro ao não ter nenhum item selecionado, valide adicionando essa linha antes do código já criado.

If Me.ListBoxDetalhamento.ListIndex < 0 Then Exit Sub

O código vai ficar assim:

Private Sub ListBoxDetalhamento_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim i As Integer
    'adiciona no outro list box
    
    If Me.ListBoxDetalhamento.ListIndex < 0 Then Exit Sub
    
    Me.ListBoxProdutos.AddItem Me.ListBoxDetalhamento.List(ListBoxDetalhamento.ListIndex)
    For i = 1 To ListBoxProdutos.ColumnCount - 1
        Me.ListBoxProdutos.List(ListBoxProdutos.ListCount - 1, i) = Me.ListBoxDetalhamento.List(ListBoxDetalhamento.ListIndex, i)
    Next i
    'remove deste list box
    Me.ListBoxDetalhamento.RemoveItem ListBoxDetalhamento.ListIndex
    
End Sub

Laennder Alves
Microsoft MVP

 
Postado : 16/04/2015 12:55 pm
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Ua!, muito obrigado pela ajuda Laennder, era exatamente o que eu precisava!!

Saberia me dizer se é possível salvar em uma planilha o conteúdo que a listbox recebeu e exclui-los da planilha DADOS?

Mais uma vez, MUITO OBRIGADO.

 
Postado : 16/04/2015 12:58 pm
(@laennder)
Posts: 62
Trusted Member
 

É possível, mas antes você teria que separar os dados da planilha DADOS, deixando apenas a base de produtos. Perceba que ao excluir uma linha dela, também excluirá dados da coluna N, que pode acarretar em um resultado inesperado no seu código.

Não analisei o código todo, por isso não mudarei nada.

Laennder Alves
Microsoft MVP

 
Postado : 16/04/2015 1:14 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Ua!, muito obrigado pela ajuda Laennder, era exatamente o que eu precisava!!

Saberia me dizer se é possível salvar em uma planilha o conteúdo que a listbox recebeu e exclui-los da planilha DADOS?

Mais uma vez, MUITO OBRIGADO.

Paulo, é possivel sim transferir para outra aba e deletar os dados da origem, eu tenho um modelo que faz exatamente isto, mas não esta aqui no serviço, qdo chegar em casa procuro e envio.
Uma pergunta, é necessário transferir de um ListBox para outro e depois enviar para a planilha ? Não poderia ter os dados em uma ListBox somente e depois que selecionar transferir direto para outra aba sem precisar de um segundo ListBox ?
De qualquer forma, pelo que me lembro o modelo faz a transferencia de dados mas tem sómente um ListBox, mas da para adaptar a rotina.

até mais tarde.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/04/2015 1:19 pm
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Olá pessoal.

Venho mais uma vez pedir a ajuda de vocês.
Tentei adaptar alguns códigos à minha planilha porém sem sucesso.

Estou tentando gerar uma rotinha que faça com que o conteúdo listbox que recebeu os dados pelo duplo clique salve os mesmos em uma outra planilha e os retire da planilha DADOS, para que na próxima consulta eles já naõ estejam mais disponíveis.

Para isso vou colocar um botão no userform para que execute essa macro.

Alguém saberia por onde começar?

 
Postado : 20/04/2015 8:21 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Como não chegou a responder oque postei acima, segue uma adaptação, mas sem ser preciso dois listbox, veja se atende, se não, é só procurar adaptar a rotina ao seu modelo original.

Listbox Transfere / Deleta

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 20/04/2015 7:43 pm
(@paulo_001)
Posts: 149
Estimable Member
Topic starter
 

Olá a todos.
Mauro, muito obrigado pela ajuda!
Refiz todo meu projeto com base no modelo que postou compilando com o código Laennder criou.

Mauro, achei curioso o fato de minha listbox excluir apenas os valores selecionados até a linha 10 da planilha.
Mas mudando essa linha

Call ExcluiLinhasPorCriterio(2, 10, 1, rStartCell)

Para:

Call ExcluiLinhasPorCriterio(2, 1000, 1, rStartCell)

Deu certo.

Mas uma vez muito obrigado pela ajuda.

 
Postado : 23/04/2015 1:23 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mauro, achei curioso o fato de minha listbox excluir apenas os valores selecionados até a linha 10 da planilha.
Mas mudando essa linha

Call ExcluiLinhasPorCriterio(2, 10, 1, rStartCell)

Para:

Call ExcluiLinhasPorCriterio(2, 1000, 1, rStartCell)

Deu certo.

Mas uma vez muito obrigado pela ajuda.

Paulo, ainda bem que ajudou, como eu havia deletado as linhas e deixei somente algumas só para alguns testes, não me atentei a este fator, só para explicar o que ocorre na linha acima:
ExcluiLinhasPorCriterio é uma Function e nele temos :
Function ExcluiLinhasPorCriterio(ByVal linhaInicial As Integer, ByVal linhaFinal As Integer, ByVal colunaCriterio As Integer, ByVal criterio As String) As Integer
Nela está fácil de identificar devido aos nomes das variáveis, eu alteraria somente a última, mas tudo bem, então :
ExcluiLinhasPorCriterio(2, 10, 1, rStartCell) é interpretada na Function da seguinte forma :

ExcluiLinhasPorCriterio(linhaInicial, linhaFinal, colunaCriterio, criterio)
Acho que já deu para entender, sendo assim o nº 10 representa a última linha, por isto pesquisava até a linha 10, e qdo alterou para um num maior ele é interpretado até esta linha.
Uma pequena alteração que eu faria, seria utilizar uma variável que já temos neste modelo e trocar este numero pela mesma, ficando assim :
Na rotina que Inicializa com o Formulário temos a declaração a Variável :
Dim ultimaLin As Long - que armazena a ultima linha preenchida, então tire-a de dentro da rotina e declare no inicio do modulo logo abaixo da linha (Private TextoDigitado As String) :
Private ultimaLin As Long

e depois troque conforme abaixo :
Esta : Call ExcluiLinhasPorCriterio(2, 10, 1, rStartCell)
Por esta : Call ExcluiLinhasPorCriterio(2, ultimaLin, 1, rStartCell)

Assim evitamos se sua planilha tiver mais de 1000 itens você ter de alterar a rotina novamente.

Espero que consiga ter explicado.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 23/04/2015 4:39 pm