Como criar automaticamente caixas vinculadas às células abaixo no Excel

Abril 2017

Vendreur Jack, membro desta comunidade, examinou a seguinte questão: Como criar, no Excel, caixas de seleção vinculadas, automaticamente, à célula na qual colocamos a dita caixa de seleção. Na verdade, sem a VBA (linguagem de programação no Excel) não é possível criar várias caixas a serem assinaladas ao mesmo tempo. Você pode fazer vários Copiar/Colar, mas se quiser vincular sua caixa a uma célula, deverá fazê-lo manualmente. Para cada uma de suas cópias, você deverá selecionar a célula a ser vinculada. Esta pode ser uma tarefa enfadonha, dependendo do número de caixas de seleção.




Tipo de controle

Existem dois tipos de caixas de seleção no Excel: as caixas do tipo formulário e os controles ActiveX. Nesta dica, vamos utilizar as caixas de seleção do tipo formulário.

Não coloque muitos itens em uma planilha do Excel

Mesmo sendo uma das possibilidades do Excel, cuidado com planilhas muito cheias. O Excel nem sempre lida bem com isso e, em geral, acabamos com uma exibição mal feita ou, no mínimo, diferente do esperado, principalmente se a sua pasta de trabalho for realizada com várias versões do Excel. Assim sendo, seria melhor procurar outra solução para evitar as instabilidades.

O que é uma CheckBox (Caixa de Seleção)?

Não vamos reescrever aqui o que o site da Microsoft já fez detalhadamente (exemplo aqui, mas apenas explicar a possibilidade de vincular uma Caixa de seleção a uma célula. Para as propriedades de nossas Checkbox (Caixas de Seleção), existem duas células importantes:

A célula de posição: célula acima da qual vamos desenhar a nossa caixa de seleção,
A célula vinculada: célula na qual vamos enviar o resultado, o valor da nossa checkbox.

Observação: nesta dica, a célula vinculada será a célula de posição.

O fato de marcar (ou desmarcar) faz com que nossa caixa de seleção envie VERDADEIRO ou FALSO para a célula vinculada. Infelizmente, o Excel não prevê o caso de querermos criar várias caixas de seleção com diversas células vinculadas (uma para cada caixa de seleção). Veja duas soluções diferentes passando pelo código VBA (Visual Basic for Applications).

Solução n°1 - Com inicialização manual

Este código VBA simples vai gerar, quando acionado, a adição de caixas de seleção vinculadas às células situadas abaixo, células essas que você selecionou anteriormente.

O código

Para instalá-lo a partir de sua pasta de trabalho, pressione as teclas ALT + F11 > Inserir/Módulo. Na janela de código deste módulo, copie e cole o seguinte código:

Option Explicit

Sub Inserer_Caixas_de_Seleção_Vinculadas()
Dim rngCel As Range
Dim ChkBx As CheckBox

For Each rngCel In Selection
  With rngCel.MergeArea.Cells
    If .Resize(1, 1).Address = rngCel.Address Then
    'Para não exibir o valor da célula vinculada, remova o apóstrofo no início da linha seguinte:
      '.NumberFormat = ";;;"
      Set ChkBx = ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height)
      With ChkBx
        'valor padrão:
        .Value = xlOff 'pode ser Verdadeiro ou Falso
        'célula vinculada
        .LinkedCell = rngCel.MergeArea.Cells.Address
        'Texto de substituição
        '.Characters.Text = "TITI"
        'texto
        '.Text = "Toto" ' ou : .Caption = "Toto"
        'bordure :
        With .Border
          'Estilo de linha
          '.LineStyle = xlLineStyleNone 'ou xlContinuous 'ou xlDashDot ou xlDashDotDot ou xlDot
          'cor
          '.ColorIndex = 3  '3 = vermelho
          'espessura da linha
          '.Weight = 4
        End With
        'propriedades também acessíveis .Locked, .Name, .Enabled etc...
      End With
    End If
  End With
Next rngCel
End Sub


Nota: As linhas verdes são os comentários. Você verá neles algumas das propriedades das caixas de seleção que você poderá adicionar. Para fazê-lo, basta remover o apóstrofo no início da linha do código em questão.</ital>

Uso

A partir de uma das planilhas da sua pasta de trabalho: selecione o intervalo de células onde você quer inserir caixas de seleção, e pressione as teclas Alt + F8, depois, selecione Inserir_Caixas_de_Seleção_Vinculadas e clique em Executar. Pronto, suas caixas de seleção foram inseridas nos lugares desejados e vinculadas às células nas quais foram colocadas.

Solução n°2 - Com inicialização automática

Aqui vamos trabalhar com um dos nossos eventos provocadores da nossa planilha Excel: o evento Worksheet_SelectionChange. Este evento lança o código que ele contém, automaticamente, cada vez que você selecionar uma célula diferente, na planilha em questão.

Cada vez que você mudar a seleção, o código proposto vai percorrer todas as células de um determinado intervalo (ou da planilha inteira, se você quiser) e, se esta célula estiver com a fonte Wingdings, ele irá inserir um falsa caixa de seleção. Nós usamos aqui os caracteres þ e o que, nesta fonte, nos retorna os símbolos correspondentes a uma caixa de seleção marcada ou desmarcada.

O código

Para inserir esse código basta você Abrir a planilha em questão, clicar com o botão direito do mouse na aba desta Planilha/Visualizar o código, e Copiar/Colar este código:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Restrição do intervalo. Para uma planilha inteira colocar um apóstrofo no início da linha seguinte
    If Intersect(Union([A2:A10], [D2:D10]), Target) Is Nothing Then Exit Sub 'intervalo A2:A10;D2:D10
    If Target.Count = 1 Or Target.MergeCells Then
        If Target.Font.Name = "Wingdings" Then
            With Target    'célula "vinculada"
                .Value = Abs(.Range("A1").Value - 1)
                .NumberFormat = """þ"";General;""o"";@"
                Application.EnableEvents = False
                .Range("A1").Offset(, 1).Select
                Application.EnableEvents = True
            End With
        End If
    End If
End Sub

Uso

para usar, selecione as células em questão, e aplique a fonte Wingdings nelas. Depois, clique em qualquer lugar na planilha e, em seguida, em cada uma das células escolhidas anteriormente.
Nota: Para obter o número de caixas marcadas em outra célula, você deverá usar a fórmula: =NB.SE (C3: C14, 1); a função =SOMA não terá nenhuma utilidade neste caso.

Nota - Proteção da planilha

Se a sua planilha estiver protegida, você deverá desprotegê-la com o código. Na verdade, em caso de proteção da planilha, uma mensagem de alerta aparece, a marca de seleção é alternada, mas o valor vinculado não.

Para desproteger e proteger novamente uma planilha do Excel, o código VBA é:

ActiveSheet.Protect "admin" 'admin = sua senha

AQUI O SEU CÓDIGO

ActiveSheet.Unprotect "admin"

Veja também

Artigo original publicado por . Tradução feita por pintuda. Última modificação: 2 de novembro de 2016 às 21:12 por ninha25.
Este documento, intitulado 'Como criar automaticamente caixas vinculadas às células abaixo no Excel', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.