Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Controle ListView

Dúvidas gerais sobre Excel
Darci de Souza
Acabou de chegar
Acabou de chegar
Mensagens: 6
Registrado em: Sex Jun 18, 2010 4:06 pm

Re: Controle ListView

Mensagem por Darci de Souza »

José,

Isso mesmo....
Agradeço se vc puder me ajudar mais um vez.

Darci


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Controle ListView

Mensagem por joseA »

Confirme se é isso. :shock:

Obs.: Implementei com FrmAuxiliar, visto que vc adicionou uma plan Auxiliar.
Anexos
ControleListViewDarci.v5.rar
(33.22 KiB) Baixado 694 vezes


Guima
Consultor
Consultor
Mensagens: 242
Registrado em: Sex Out 30, 2009 6:10 am

Re: Controle ListView

Mensagem por Guima »

Olá a Todos,

Chegou minha vez de ressuscitar esse Tópico.

Como já havia comentado com o José (Fera) estou mudando meus Listbox para Listview. Porém como estou aprendendo ainda surge algumas dúvidas e que creio serem cruciais para continuar a mudança:

- É possível proibir qualquer tipo de alteração dentro do LIstview ?
Por exemplo: Eu posso clicar dentro do Listview e mudar manualmente um dado, e até mesmo aumentar ou diminuir o tamanho de uma coluna, é possível travar isso ?

Obs: Mudando a propriedade Enabled para FALSE isso ocorre porém o Listview ficaria praticamente igual ao LISTBOX, então não seria funcional. Utilizando a propriedade Hot Tracking do Listview também é possível proibir a edição dos dados, porém só de passar o mouse em cima, ele já muda de linha, além de não evitar a possibilidade de alterar o tamanho das colunas. Resumindo, ambas as possibilidades já foram tentadas e não atenderam minhas necessidades.


- É possível fazer com que o Listview receba os dados colocando sempre o último item digitado na primeira linha, e não ordenando em ordem do maior para o menor e vice-versa ?

EM TEMPO...

No Listbox eu utilizo um FIND para procurar os dados similares na planilha e fazer uma soma ou subtração. Utilizando as propriedades COUNT e LIST do Listbox, ficando assim:

Código: Selecionar todos

For Y = 0 To ListBox1.ListCount - 1
    Set r = Sheets("BDCQE").Range("C2:C5000").Find(What:=Val(ListBox1.List(Y, 0)), After:=Sheets("BDCQE").Range("C2"), LookIn:=xlValues, LOOKAT _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)

    If Not r Is Nothing Then
        Sheets("BDCQE").Range("E" & r.Row) = Sheets("BDCQE").Range("E" & r.Row) - ListBox1.List(Y, 2)
    End If
Next
Qual seria as propriedades semelhante do Listview ? Tentei a propriedade ListItems e nao deu certo. Qual então seria o meio correto de fazer o que hoje no Listbox pelo Listview ?


Obrigado a todos e um ótimo feriadão !!!


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Controle ListView

Mensagem por Mauro Coutinho »

Guima, quanto a primeira questão, não tenho certeza, mas acredito que só ordenando os dados na planilha e recarregando o ListView, assim que possível faço umas pesquisas para confirmar, enquanto isso vamos aguardar o que o José tem a dizer.

Quanto a segunda questão, eu ia postar nas Dicas um exemplo que baixei do outro forun que participo (Yahoo), referente a Edição e Alteração atraves de ListView, achei um ótimo exemplo e acredito que com algumas adaptações resolverá sua questão de Pesquisar pelo ListView, esse modelo permite que você escolha antes em qual coluna se encontra o dado que quer Editar e Alterar, e após a confirmação é alterado tanto no Listview como na planilha e para isso tem a rotina de pesquisa que como eu disse é só adaptar para seu uso.

Veja se ajuda.

[]s
Anexos
ListView - Editar itens.rar
Editar / Alterar Itens ListView
(17.04 KiB) Baixado 758 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Guima
Consultor
Consultor
Mensagens: 242
Registrado em: Sex Out 30, 2009 6:10 am

Re: Controle ListView

Mensagem por Guima »

Boa noite Mauro,

Como sempre aparece você, sempre solícito e disposto a ajudar...

Bom, em relação a sua primeira resposta ainda também não consegui nenhuma resposta diferente da que você sugeriu, mas que não servirá no meu caso. E olha que já revirei o google atrás de uma solução, como você disse, o jeito é esperar o José. Ele tem usado bastante o Listview, talvez tenha alguma outra alternativa.

Em relação a questão da edição, creio que não me fiz entender. O que necessito não é de uma rotina para fazer edição, quanto a isso até tenho uns exemplos do próprio Jose. O que gostaria de saber é se possível impossibilitar que seja alterado o tamanho das colunas, pois uma vez que selecione uma delas com o mouse é permitido alterar a largura delas, gostaria de impedir isso.

Porém a questão que mais está me fazendo arrancar meus poucos cabelos é reproduzir a rotina que usava com o LISTBOX e que postei no post anterior. Já fuçei o google inteiro e nada. Cheguei numa rotina que considero proxima, porém apesar disso, não subtrai depois o valor final. Veja só a rotina comentada:

Código: Selecionar todos

' Rotina que pega os valores que constam no Listview e procura na planilha valor semelhante e subtrai o valor do LIstview pelo da planilha

For Y = 1 To LISTA.ListItems.Count
Set r = Sheets("BDCQE").Range("C2:C5000").Find(What:=Val(LISTA.ListItems(Y).SubItems(1)), After:=Sheets("BDCQE").Range("C2"), LookIn:=xlValues, LOOKAT _'procura na planilha BDCQE na coluna C um valor que seja igual ao valor da linha 1, coluna 1 do LIstview
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)

    If Not r Is Nothing Then
        Sheets("BDCQE").Range("E" & r.Row) = Sheets("BDCQE").Range("E" & r.Row) - (LISTA.ListItems(Y).SubItems(3)) ' caso encontre irá subtrair o valor  da linha 1 e coluna 3 do Listview  pelo valor que consta na planilha. Ex. Caso tenha 10 na planilha e 2 no Listview irá efetuar a operação de subtração 10  - 2
    End If


  Next 'repete a operação nas próximas linhas do Listview

É isso.... não sei deu pra entender, mas o que era simples no Listbox virou uma confusão no Listview. Tomara que consiga encontrar uma solução. Abraço e obrigado Mauro


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Controle ListView

Mensagem por joseA »

Boa tarde,
Mauro Coutinho escreveu:...eu ia postar nas Dicas um exemplo que baixei do outro forun que participo (Yahoo), referente a Edição e Alteração atraves de ListView, achei um ótimo exemplo e acredito que com algumas adaptações resolverá sua questão de Pesquisar pelo ListView, esse modelo permite que você escolha antes em qual coluna se encontra o dado que quer Editar e Alterar, e após a confirmação é alterado tanto no Listview como na planilha e para isso tem a rotina de pesquisa que como eu disse é só adaptar para seu uso...
Mauro tu andastes para achar esse exemplo, foi criado por mim, está na 1ª página desse tópico viewtopic.php?f=6&t=233&start=0, acho que no 6º post EditarItensListView.rar.

Em tempo...
Desculpem-me se estou escrevendo e editando depois é que o micro aqui está caindo o tempo todo, senão perco o que digito.
Mauro Coutinho escreveu:... não tenho certeza, mas acredito que só ordenando os dados na planilha e recarregando o ListView...
Quanto a essa questão, se for carregar os dados para o controle na mesma ordem da planilha e não invertido, temos vários exemplos no fórum.

Aqui tem um:

viewtopic.php?f=2&t=344&start=10


Guima
Consultor
Consultor
Mensagens: 242
Registrado em: Sex Out 30, 2009 6:10 am

Re: Controle ListView

Mensagem por Guima »

Olá José,

NO meu post anterior eu "comi" uma palavra na hora de escrever e que faz toda a diferença. Quero proibir a alteração da largura das COLUNAS, pois sobre a edição dos dados já havia conseguido através de seus exemplos.

Mauro Coutinho escreveu:
... não tenho certeza, mas acredito que só ordenando os dados na planilha e recarregando o ListView...


Quanto a essa questão, se for carregar os dados para o controle na mesma ordem da planilha e não invertido, temos vários exemplos no fórum.

Aqui tem um:
Sobre a questão de carregamento dos dados também já consegui uma solução razoável.

A única dúvida que ainda permanece é referente a questão do FIND. Já pude perceber lendo alguns códigos em diversos fórum, que o LIstview tem o FINDITEM. Porém ele busca no LISTVIEW um valor igual ao que esteja num TEXTBOX ou na planilha. A minha necessidade é diferente. Preciso adaptar minha rotina que já funcionava com o LISTBOX para o LISTVIEW.

Código: Selecionar todos

' TRANSFERE DADOS DO LISTBOX PARA A PLAN BDCQE
For Y = 0 To ListBox1.ListCount - 1

    Set r = Sheets("BDCQE").Range("C2:C5000").Find(What:=Val(ListBox1.List(Y, 0)), After:=Sheets("BDCQE").Range("C2"), LookIn:=xlValues, LOOKAT _
       ':=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        'False, SearchFormat:=False)

    If Not r Is Nothing Then
        Sheets("BDCQE").Range("E" & r.Row) = Sheets("BDCQE").Range("E" & r.Row) - ListBox1.List(Y, 2)
    End If
Next
O código acima faz o seguinte: Procura o valor da primeira COLUNA do LISTBOX na planilha BDCQE, de C2 até C5000, uma vez encontrado esse valor será subtraido o valor da COLUNA 3 da mesma linha do LISTBOX menos o valor respectivo na planilha BDCQE na coluna E. Depois há um loop repetindo a operação em cada linha do LISTBOX

Tentei algo simples, alterando apenas o Listbox.LIST(Y,0) por LISTA.ListItems(Y).SubItems(1). Porém apesar de não haver nenhum erro, a rotina não funciona. Segue ela completa abaixo:

Código: Selecionar todos

' Rotina que pega os valores que constam no Listview e procura na planilha valor semelhante e subtrai o valor do LIstview pelo valor encontrado na planilha
For Y = 1 To LISTA.ListItems.Count
Set r = Sheets("BDCQE").Range("C2:C5000").Find(What:=Val(LISTA.ListItems(Y).SubItems(1)), After:=Sheets("BDCQE").Range("C2"), LookIn:=xlValues, LOOKAT _'procura na planilha BDCQE na coluna C um valor que seja igual ao valor da linha 1, coluna 1 do LIstview
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False)

    If Not r Is Nothing Then
        Sheets("BDCQE").Range("E" & r.Row) = Sheets("BDCQE").Range("E" & r.Row) - (LISTA.ListItems(Y).SubItems(3)) ' caso encontre irá subtrair o valor  da linha 1 e coluna 3 do Listview  pelo valor que consta na planilha. Ex. Caso tenha 10 na planilha e 2 no Listview irá efetuar a operação de subtração 10  - 2
    End If


Next 'repete a operação nas próximas linhas do Listview
Obrigado José e a todos que puderem colaborar


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Controle ListView

Mensagem por joseA »

Guima escreveu:... se possível impossibilitar que seja alterado o tamanho das colunas, pois uma vez que selecione uma delas com o mouse é permitido alterar a largura delas, gostaria de impedir isso...
Quando a determinação de largura das colunas pode ser feita via código, repare em alguns exmplos bem no inicio quando é carregado os dados para controle ou na propriedade do controle >Personalizado>Colunm Headers.

Nesse exemplo determina-se nome - largura

Código: Selecionar todos

    With Me.ListView1
        .ColumnHeaders.Add Text:="Nome", Width:=80
        .ColumnHeaders.Add Text:="Endereço", Width:=80
        .ColumnHeaders.Add Text:="Fone", Width:=80
        .ColumnHeaders.Add Text:="Status", Width:=80
Agora se é possível bloquear a edição da largura da coluna, não sei. Mas acho essa funcionalidade um trunfo do controle, pois se os dados estão maior do que a coluna bastaria “esticar” a mesma assim visualizaríamos melhor os dados. Quando vc reabri a coluna retorna ao mesmo tamanho que foi determinado.


Avatar do usuário
joseA
Jedi
Jedi
Mensagens: 1048
Registrado em: Qui Out 22, 2009 7:22 am
Localização: Cel. Fabriciano - MG

Re: Controle ListView

Mensagem por joseA »

E aí careca...
Guima escreveu:... está me fazendo arrancar meus poucos...
:lol:

Qualquer coisa, desculpe-me pela brincadeira.

Na 2ª página desse tópico no 4º post viewtopic.php?f=6&t=233&start=10
tem um exemplo de pesquisa com critério no controle ListViewFitroCritério.rar

Qualquer coisa post um pequeno exemplo, resumido, com o modelo que vc quer.

Faço assim, sempre simulo um exemplo reduzido para chegar ao que desejo.

Abraços.


Guima
Consultor
Consultor
Mensagens: 242
Registrado em: Sex Out 30, 2009 6:10 am

Re: Controle ListView

Mensagem por Guima »

Código: Selecionar todos

E aí careca...
Careca ainda não... restam-me os Heróis da Resistência...rs (lembra da banda ? Nem venha falar que não é da tua época, hein...rs)

Bom, vou verificar o exemplo que você sugeriu com atenção, mas como já tenho quase certeza que já vi ele e que o que necessito é diferente vou encaminhar o exemplo em anexo. Como estou na fase de Testes mantenho no mesmo Formulário e nas linhas de código o LISTBOX e LISTVIEW. Na rotina FINALIZA é onde está nosso "objeto de análise". A parte do LISTBOX eu deixei como comentário, mas se quiser verificar o funcionamento basta tirar as " ' " para que funcione. O que ela faz é que precisa ser feito no LISTVIEW. Perceba que a quantidade de determinado produto ao terminar essa rotina será subtraída. Qualquer dúvida só chamar.


[REMOVIDO]

Abraço e obrigado por mais essa.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder