Ir ao conteúdo
  • Cadastre-se

Excel CheckBoxes somem da ListView.


Ir à solução Resolvido por LaerteB,

Posts recomendados

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.

 

Link para o comentário
Compartilhar em outros sites

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) beleza.


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

Checkbox erro.rar

Link para o comentário
Compartilhar em outros sites

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-questions/337574-disappearing-listview-checkboxes-multipage.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 🤔 ????).

 

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

 

Obs: Se pudessemos impedir do usuário de clicar em qualquer lugar vazio do formulário
resolveria este problema 🙂...mas provavelmente surgiriam outros problemas 🤔..

 

Aguardando...

 

Abraços a todos 🙂

 

LaerteB

Link para o comentário
Compartilhar em outros sites

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:

 

   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 🤔, para uma solução...

 

Agradeço


LaerteB 🙂

Link para o comentário
Compartilhar em outros sites

  • Solução

Bom dia, Pessoal!

 

Consegui resolver o problema (com esta gambiarra), tirei o código exemplo de outro Forum; do nosso amigo "Mauro Coutinho"  👍 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..  😁 :

 

  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  👍 ...

 

Valeu mesmo a todos  🙌.

 

Abraços

 

LaerteB

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...