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

[RESOLVIDO] - CheckBoxes somem da ListView.

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

[RESOLVIDO] - CheckBoxes somem da ListView.

Mensagem por LaerteB »

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:

Código: Selecionar todos

 ' 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:

Código: Selecionar todos

 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:

Código: Selecionar todos

 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.
Editado pela última vez por LaerteB em Qua Out 03, 2018 11:17 am, em um total de 1 vez.


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
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: CheckBoxes somem da ListView.

Mensagem por LaerteB »

Boa noite Pessoal.

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.

Reparei que quando abre direto na page1 as caixinhas da listview1 estão lá, mas se abrir na page0 elas somem.

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

Obrigado, aguardando respostas.

Abraços LaerteB
Anexos
Checkbox erro.rar
(23.45 KiB) Baixado 238 vezes


Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: CheckBoxes somem da ListView.

Mensagem por LaerteB »

Pessoal, Bom dia!

Eu resolvi fazer um teste, para o segundo código que infomei na minha primeira mensagem que
ainda não tinha usado (vejam o link referente a este código: https://www.mrexcel.com/forum/excel-que ... ipage.html).

Este código 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 continua 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).

Código: Selecionar todos

Dim i As Integer

    For i = 1 To Me.ListView1.ListItems.Count
        With Me.ListView1
            .ListItems(i).Checked = False
        End With
    Next i
Obs: Se pudessemos impedir do usuário de clicar em qualquer lugar vazio do formulário
resolveria este problema :D ...mas provavelmente surgiriam outros problemas :? ..

Aguardando...

Abraços a todos :)

LaerteB


Avatar do usuário
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: CheckBoxes somem da ListView.

Mensagem por LaerteB »

Bom dia, pessoal!!

Então ainda não consegui resolver por completo o problema e ainda preciso de uma mãozinha...

Parece que consegui fazer uma gambiarra para quando os checkbox forem marcados gravem na Plan2 (somente as linhas selecionadas); só que ele verifica somente
a 1ª linha marcada (aquelas linhas que ficam gravadas na plan2 somente a 1ª é selecionada); 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 :? ...

Desta forma preciso que seja feita uma varredura completa nas linhas da Plan2 de seu ID (coluna 6 da listview e da Plan2), como se encontra no código que
fiz, que infelizmente somente "pega" a 1ª linha da Plan2 (provavelmente estou esquecendo algo neste código ou fiz errado, desculpe meu lapso mental :? ).

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

Código: Selecionar todos

   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
Agora estou aguardando uma luz :idea: , para uma solução...

Agradeço
LaerteB :)


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
LaerteB
Colaborador
Colaborador
Mensagens: 96
Registrado em: Qui Out 19, 2017 8:20 am

Re: CheckBoxes somem da ListView.

Mensagem por LaerteB »

Bom dia, Pessoal!

Consegui resolver o problema (com esta gambiarra), tirei o código exemplo de outro Forum 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: :

Código: Selecionar todos

  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 :boa: ;) ...

Valeu mesmo a todos :D .

Abraços

LaerteB


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