Página 4 de 8

Re: Controle ListView

Enviado: Sex Jul 16, 2010 9:41 am
por Darci de Souza
José,

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

Darci

Re: Controle ListView

Enviado: Sáb Jul 17, 2010 2:28 pm
por joseA
Confirme se é isso. :shock:

Obs.: Implementei com FrmAuxiliar, visto que vc adicionou uma plan Auxiliar.

Re: Controle ListView

Enviado: Dom Set 05, 2010 1:03 pm
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 !!!

Re: Controle ListView

Enviado: Dom Set 05, 2010 10:01 pm
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

Re: Controle ListView

Enviado: Dom Set 05, 2010 10:26 pm
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

Re: Controle ListView

Enviado: Seg Set 06, 2010 4:23 pm
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

Re: Controle ListView

Enviado: Seg Set 06, 2010 5:36 pm
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

Re: Controle ListView

Enviado: Seg Set 06, 2010 5:41 pm
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.

Re: Controle ListView

Enviado: Seg Set 06, 2010 5:53 pm
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.

Re: Controle ListView

Enviado: Seg Set 06, 2010 6:19 pm
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.