Notifications
Clear all

CheckBoxes somem da ListView.

12 Posts
2 Usuários
0 Reactions
3,085 Visualizações
(@laerteb)
Posts: 67
Trusted Member
Topic starter
 

Olá Pessoal!

Estou com problema, como o Título diz, a caixinha do Checkbox na ListView sumiu.
Ocorre o seguinte, tenho duas ListView em uma Multipage; se encontra na page 1 e elas
atualizam normalmente quando passo de uma page a outra; nas duas ListView deixei ativado
as checkboxes na primeira coluna (com numeração) de cada uma, a primeira quando marco
o item é transferido para a segunda ListView (por meio de um botão que está funcionado
perfeitamente)... então posso marcar na segunda ListView os itens que quero, até aí tudo bem,
agora se por acaso clico fora da ListView (em qualquer parte dentro da multipage em local que
não contenha conteúdo nenhum) todas as caixinhas (tanto da 1ª como da 2ª ListView) somem.

Eu sei que as caixinhas marcadas continuam marcadas, pois tenho uma label que conta os
itens marcados; daí para voltar ao normal tenho que ficar clicando em cada um dos itens da
ListView.

Já tentei várias soluções, mas nenhuma deu resultado, pode ser que estou fazendo algo errado.

Alguns métodos que encontrei:

- no site mrexcel gringo:

 ' colocar isso em sua rotina LoadListView (não sei bem onde colocar)
With Me.YourListView
            .ColumnHeaders.Clear
            .ListItems.Clear
            .Gridlines = True
            .CheckBoxes = True
            .HideColumnHeaders = False
            .View = lvwReport
            .Visible = True
        End With

Este acima coloquei na atualização da ListView, na Multipage1 e não deu certo (só apagou por completo o conteúdo das ListView)

- no site mrexcel gringo também:

 Dim i As Integer

    For i = 1 To Me.ListView1.ListItems.Count
        With Me.ListView1
            .ListItems(i).Checked = False
        End With
    Next i

Este acima ainda não testei e não sei onde inseri-lo ( e pelo que estou vendo não sei se vai resolver)

Até tentei por mim mesmo este código:

 For i = 1 To ListView2_plano.ListItems.Count

    If (ListView2_plano.ListItems(i).Checked = False) or (ListView2_plano.ListItems(i).Checked = True) Then
    item.checked.visible = true

    End If
    Next i

Só que não deu certo também.

Agora estou recorrendo a vocês, alguém tem alguma ajuda para este caso, eu sei que
existe muitas pessoas que estão na mesma situação.

Agradeço desde já e aguardando uma resposta.

Abraços LaerteB.

 
Postado : 24/09/2018 3:12 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

LaerteB,

Bom dia!

Creio que para uma ajuda rápida e eficaz você deve anexar o arquivo aqui. Se for muito grande, faça um pequeno exemplo do mesmo (idêntico ao original), com apenas umas 3 ou 4 linhas, compacte com .ZIP e anexe aqui.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 25/09/2018 8:30 am
(@laerteb)
Posts: 67
Trusted Member
Topic starter
 

Boa Noite Wagner.

Só estou respondendo agora, pois estava em transito.. e quando olhei a sua resposta resolvi fazer um exemplo "simples" do meu projeto (o meu projeto é muito grande), mas parecido ao que está dando o "sumiço" das caixinhas dos CheckBoxes.
Não arrumei os códigos na listview1 para quando clicar mais de um item (senão ficaria com muitos códigos, fiz para ser enxuto aqui neste exemplo), desta maneira quando clicar no botão Add Itens irá acrescentar em duplicata os itens na listview2, mas isso é irrelevante aqui neste exemplo (no meu projeto está OK) blz.
E reparei que quando abre direto na page1 as caixinhas da listview1 estão lá, mas se abrir na page0 elas somem também.

Estou anexando o arquivo, espero que ajude a elucidar melhor este problema.

Obrigado, aguardando respostas..

Abraços LaerteB

 
Postado : 25/09/2018 3:49 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

LaerteB,

Bom dia!

Como estou meio sem tempo no momento, veja se o link abaixo te ajuda.

https://www.mrexcel.com/forum/excel-que ... ipage.html

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 26/09/2018 6:36 am
(@laerteb)
Posts: 67
Trusted Member
Topic starter
 

Bom dia, Wagner.

Quero muito agradecer a sua resposta.

Então eu já citei este site (forum, sem mencionar a URL como você citou) na minha primeira mensagem sobre o problema (copiei as soluções com os códigos que estão neste tópico do mrexcel na minha primeira mensagem pode verificar), como tinha dito uma delas só "apagou" as listviews (este código pode ser usado para recarregar as listviews ao ativar uma página, tirando o problema da listview aparecendo em locais estranhos no carregamento do formulário, mas eu tenho outra solução para este problema que está no exemplo que fiz e que funciona muito bem também); em relação ao segundo código (que eu tinha dito na 1ª mensagem, não ter usado ainda) eu agora fiz um teste e funcionou em partes, vou explicar, as caixinhas apareceram, mas os itens que eu selecionei sumiram, as caixinhas ficaram vazias (a Label que informa quantos itens foram selecionados ainda continuam informando que estão selecionados :shock: :?: ????).

Posso usar este código colocando uma msgbox para informar o usuário que não deve ser clicado fora dos locais indicados, mas gostaria de uma outra solução que não desapareça a seleção já marcada (as caixinhas que sumiam foram resolvidas com este código que estou informando novamente abaixo), vou aguardar mais para ver se alguém tem uma outra luz para isso também, pois tem um sistema que impede de selecionar mais de 1 Item por vez na 1ª ListView (para não haver duplicatas de itens na 2ª ListView).

Dim i As Integer

    For i = 1 To Me.ListView1.ListItems.Count
        With Me.ListView1
            .ListItems(i).Checked = False
        End With
    Next i

Agradeço muito Wagner :D ..

LaerteB. :)

 
Postado : 26/09/2018 7:18 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

LaertB,

Como disse, estou realmente sem muito tempo mas... me ocorreu uma ideia aqui com relação a essa questão da marcação das checkboxs. Você pode tentar colocar um código no evento que é acionado quando há uma mudança de uma página para a outra, que grave na planilha (em um local qualquer que pode até ser em células ocultas para não imprimir indevidamente) o estado de cada chekbox marcada. Então, ao ler novamente o listview, você ler o estado delas diretamente das células onde gravou esse estado e carrega esse estado nas mesmas de modo a refletir o estado correto das mesmas. Tente isso e veja se dá certo. É uma gambiarra mas... o importante é funcionar.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 26/09/2018 8:04 am
(@laerteb)
Posts: 67
Trusted Member
Topic starter
 

Wagner,

Interessante a sua sugestão :idea: , vou ver como posso fazer isso, sei que é uma gambiarra, mas se der certo será muito bem vinda :) ...

Agradeço, e logo que conseguir ou não aviso aqui.

LaerteB :)

 
Postado : 26/09/2018 8:13 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

LaerteB,

Pedimos, por gentileza, não utilizar as citações de inteiro teor das mensagens que lhe são encaminhadas. Elas são desnecessárias. As citações, quando estritamente necessárias ao entendimento da mensagem que você quer enviar, devem restringir-se apenas a pequenos trechos.

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 26/09/2018 8:18 am
(@laerteb)
Posts: 67
Trusted Member
Topic starter
 

Wagner,

Opa desculpe :oops: , não vai ocorrer novamente.

Obrigado :) .
LaerteB

 
Postado : 26/09/2018 10:37 am
(@laerteb)
Posts: 67
Trusted Member
Topic starter
 

Bom dia, Wagner.

Estou tendo um bug mental :? , preciso de uma ajudinha :) .. primeiro consegui fazer aquela gambiarra de quando os checkbox
forem marcados gravem na Plan2 somente as linhas selecionadas, só que ele verifica a 1ª linha marcada (que ficam gravadas na plan2,
será temporário); desta forma ele consegue marcar na checkbox da 2ª listview somente a 1ª linha que está registrada na plan2 e
as seguintes linhas gravadas na plan2 ele não está lendo :?: ...

Este é o código para verificar e marcar a checkbox que está gravado na Plan2:

   Dim r, k As Integer
   Dim lin As Long
  
   Plan2.Select
   Plan2.Range("A2").Select

   lin = 2
        
    For r = 1 To Me.ListView2.ListItems.Count
        
        With Me.ListView2
        
        Do Until Sheets("Plan2").Cells(lin, 1) = ""
            
         If .ListItems(r).ListSubItems(6).Text = Sheets("Plan2").Cells(lin, 6) Then
        
                    .ListItems(r).Selected = True
                     .ListItems(r).Checked = True
                    
              End If
            lin = lin + 1
        Loop
        End With
    Next r

Estamos bem perto da solução né.. espero que consigamos com essa gambiarra..

LaerteB :)

 
Postado : 28/09/2018 7:18 am
(@laerteb)
Posts: 67
Trusted Member
Topic starter
 

Boa tarde, pessoal!!

Se alguém tiver uma dica ou sugestão de como posso acertar o meu código acima descrito, pode ficar a vontade :D ...

Estou esperando... preciso resolver o mais breve possível.. continuo vendo outras formas de solução, mas ainda nenhuma
se encaixa no contexto :cry: ...

Obrigado.

LaerteB :)

 
Postado : 01/10/2018 11:54 am
(@laerteb)
Posts: 67
Trusted Member
Topic starter
 

Bom dia, Pessoal!

Consegui resolver o problema (com esta gambiarra), tirei o código exemplo deste mesmo Forum Planilhando
do nosso amigo "Mauro Coutinho" :idea: e modifiquei para este código abaixo.

Agora as caixinhas (com os códigos anteriores que mencionei) não somem e voltam ao estado
original de quando foram selecionadas ;) .

Só uma coisa, para os que irão utilizar estes códigos, não esquecer de acertar também a
ListView1, aqui só estou passando como funciona com estes códigos na ListView2.. ;) OK.

Abaixo o código "Salvador" rsrs.. :lol: :

  Dim idbox As Range
  Dim linUlt As Long
  Dim sidbox
  Dim r
 
  ' definimos a aba
  Dim work As Worksheet
  Set work = Worksheets("Plan2")

  ' verificação da ultima linha preenchida
   linUtil = work.Cells(Rows.Count, "F").End(xlUp).Row

   Set idbox = work.Range("F2:F" & linUtil)

   For Each sidbox In idbox

    For r = 1 To ListView2.ListItems.Count

        If ListView2.ListItems(r).ListSubItems(6).Text = sidbox Then
           ListView2.ListItems(r).Checked = True

        End If

    Next r

      Next sidbox

Agradeço a todos que tentaram me ajudar ;) , muito obrigado e se não fosse a dica do "Wagner" e o exemplo do "Mauro Coutinho" do Planilhando estaria tentando :D ...

Valeu mesmo a todos ;) .

Abraços

LaerteB

 
Postado : 03/10/2018 7:26 am