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

Ajuda - Varios Checkbox em uma unica célula

Esclarecimentos e dúvidas sob o Modelo de Aplicativo de Cadastro em VBA no Microsoft Excel publicado no site e blog http://www.tomasvasquez.com.br
Pichol
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Ter Fev 14, 2017 9:42 pm

Ajuda - Varios Checkbox em uma unica célula

Mensagem por Pichol »

Boa noite a todos, estava precisando de uma ajuda com checkbox...

A situação é a seguinte, estou elaborando um Form onde terão vários checkbox para o usuário ir marcando, conforme ele marcar essas opções como verdadeiro, será armazenado em uma única celula esses dados em texto.

Por exemplo, o usuário marcou os checkbox 1, 2 e 3, então após clicar no command button de enviar, será armazenado esses valores da seguinte forma dentro da celula checkbox1 / checkbox2 / checkbox3

PS: Preciso fazer isso para uns 40 checkbox mas dificilmente o usuario irá flagar mais de 5 checkbox....

É possível elaborar isso?

Obrigado.


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.


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Ajuda - Varios Checkbox em uma unica célula

Mensagem por srobles »

Pichol,

Adicione o código abaixo, no botão do seu Form :

Código: Selecionar todos

    'Variável para armazenar 39 controles
    Dim ctlNome(1 To 40) As String
    'Variável para podermos trabalhar apenas nos controles do Form
    Dim ctlChk As Control
    'Variável para controle dos objetos
    Dim contador As Integer
    
    'Laço FOR EACH para validarmos quais CheckBox estão marcados
    For Each ctlChk In Me.Controls
        'Se o tipo do nome do controle for igual a CheckBox e o mesmo estiver flagado
        If TypeName(ctlChk) = "CheckBox" And ctlChk = True Then
            'Incrementamos o contador
            contador = contador + 1
            'Adicionamos seu texto á lista de variáveis (39)
            ctlNome(contador) = ctlChk.Caption
        End If
    Next
    
    'Variável para armazenar todos os CheckBoxes flagados
    Dim listaOpcoes As String
    
    'Verificamos quais dentre os 39 estão marcados
    For a = 1 To UBound(ctlNome)
        'Se a variável de id "a" for diferente de nula
        If ctlNome(a) <> "" Then
            'Adicionamos o texto do checkbox e concatenamos a variável o caracter /
            listaOpcoes = listaOpcoes & ctlNome(a) & " / "
        End If
    Next
    
    'Escrevemos na célula A1 o resultado final
    ThisWorkbook.Sheets("Plan1").Range("A1") = Mid(listaOpcoes, 1, Len(listaOpcoes))
Aguardo retorno.

Abs


nhyky12@gmail.com
Colaborador
Colaborador
Mensagens: 25
Registrado em: Dom Set 25, 2016 3:26 am

Re: Ajuda - Varios Checkbox em uma unica célula

Mensagem por nhyky12@gmail.com »

Ola minha duvida e igual, a diferença que as 40 checkbox que tenho (arroz,feijão,batata..), devem preencher uma textbox. Isso seria uma lista de compras e os itens selecionados ficariam em uma unica textbox. Ou seja, queria que a propriedade capiton das checkbox , preechar a textbox.
Como eu poderia fazer isso?
Agradeço a ajuda.


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Ajuda - Varios Checkbox em uma unica célula

Mensagem por srobles »

nhyky,

Veja se o exemplo abaixo atende sua necessidade. Apenas se atente em chamar esta rotina no evento click de cada checkbox.

Código: Selecionar todos

Sub validarSelecao()
    'Variável para armazenar 39 controles
    Dim ctlNome(1 To 40) As String
    'Variável para podermos trabalhar apenas nos controles do Form
    Dim ctlChk As Control
    'Variável para controle dos objetos
    Dim contador As Integer
    
    'Laço FOR EACH para validarmos quais CheckBox estão marcados
    For Each ctlChk In Me.Controls
        'Se o tipo do nome do controle for igual a CheckBox e o mesmo estiver flagado
        If TypeName(ctlChk) = "CheckBox" And ctlChk = True Then
            'Incrementamos o contador
            contador = contador + 1
            'Adicionamos seu texto á lista de variáveis (39)
            ctlNome(contador) = ctlChk.Caption
        End If
    Next
    
    'Variável para armazenar todos os CheckBoxes flagados
    Dim listaOpcoes As String
    listaOpcoes = ""
    'Verificamos quais dentre os 39 estão marcados
    For a = 1 To UBound(ctlNome)
        'Se a variável de id "a" for diferente de nula
        If ctlNome(a) <> "" Then
            'Adicionamos o texto do checkbox e concatenamos a variável com o caracter "," (vírugula)
            listaOpcoes = listaOpcoes & ctlNome(a) & ", "
        End If
    Next
    
    'Escrevemos no TextBox o resultado final
    Me.TextBox1 = Mid(listaOpcoes, 1, Len(listaOpcoes)-2)
End Sub
Espero ter ajudado.

Abs


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.


nhyky12@gmail.com
Colaborador
Colaborador
Mensagens: 25
Registrado em: Dom Set 25, 2016 3:26 am

Re: Ajuda - Varios Checkbox em uma unica célula

Mensagem por nhyky12@gmail.com »

Ola meu amigo:
erro na linha: If TypeName(ctlChk) = "CheckBox" And ctlChk = True Then

Numero de argumentos incorreto ou atribuição de propriedade invalida
Que sera que estou errando?


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Ajuda - Varios Checkbox em uma unica célula

Mensagem por srobles »

nhyky,

Amigo, montei um exemplo com o mesmo código que postei e não foram gerados erros. Todavia, deixo o modelo em anexo para estudos.

Abs
Anexos
modelo_Validação_CheckBox.zip
(15.58 KiB) Baixado 620 vezes


nhyky12@gmail.com
Colaborador
Colaborador
Mensagens: 25
Registrado em: Dom Set 25, 2016 3:26 am

Re: Ajuda - Varios Checkbox em uma unica célula

Mensagem por nhyky12@gmail.com »

Muito obrigado.
Descobri o problema, se houver algum frame no formulário da aquele erro. Estranho !
Tente ai e veja.


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Ajuda - Varios Checkbox em uma unica célula

Mensagem por srobles »

nhyky,

Realmente não me atentei á questão do Frame. Todavia, basta modificar a linha :

Código: Selecionar todos

    For Each ctlChk In Me.Controls
Por :

Código: Selecionar todos

    For Each ctlChk In Me.Frame1.Controls
E o problema se resolve.

Espero ter ajudado.

Abs


nhyky12@gmail.com
Colaborador
Colaborador
Mensagens: 25
Registrado em: Dom Set 25, 2016 3:26 am

Re: Ajuda - Varios Checkbox em uma unica célula

Mensagem por nhyky12@gmail.com »

Amigo srobles
Mais uma pequena duvida.
E se ele estiver em uma multpagina e esta estiver dentro de uma frame.
Como resolveria para ela funcionar.


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Ajuda - Varios Checkbox em uma unica célula

Mensagem por srobles »

nhyky,

Neste caso, deve-se apontar o lugar exato de onde os CheckBox estarão, ex :

Código: Selecionar todos

   For Each ctlChk In Me.Multipage1.Pages(numeroPagina).FrameX.Controls
Agora, se você precisar "varrer" todo o Formulário, buscando por todos os CheckBox contidos nele, você deverá fazer um Loop para cada página do MultiPage, ex :

Código: Selecionar todos

   Dim idPagina As Long
   For idPagina = 0 To Me.MultiPage1.Pages.Count 'Começamos o laço da primeira até a última pagina
      Me.MultiPage1.Value = idPagina 'Aqui ativamos a página de acordo com a variável
      'Aqui, chamamos a rotina de validação dos controles, usando o exemplo acima
         For Each ctlChk In Me.Multipage1.Pages(idPagina).FrameX.Controls
            'Rotina para validação
         Next
   Next
Repare que em ambos os exemplos, apontamos para o Frame onde os CheckBox estão. No caso X seria o numero dele. Se seus Frames possuem outro nome, se atente á isso.

Espero ter ajudado.

Abs.


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