Página 1 de 3

Ajuda - Varios Checkbox em uma unica célula

Enviado: Ter Fev 14, 2017 10:06 pm
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.

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

Enviado: Qua Fev 22, 2017 9:23 pm
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

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

Enviado: Sáb Mai 05, 2018 9:58 pm
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.

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

Enviado: Dom Mai 06, 2018 1:15 pm
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

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

Enviado: Seg Mai 07, 2018 6:04 pm
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?

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

Enviado: Seg Mai 07, 2018 6:44 pm
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

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

Enviado: Seg Mai 07, 2018 6:59 pm
por nhyky12@gmail.com
Muito obrigado.
Descobri o problema, se houver algum frame no formulário da aquele erro. Estranho !
Tente ai e veja.

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

Enviado: Seg Mai 07, 2018 7:42 pm
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

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

Enviado: Seg Mai 07, 2018 8:08 pm
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.

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

Enviado: Seg Mai 07, 2018 9:20 pm
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.