Nessa dica, veja como criar caixas de seleção automaticamente vinculadas a células específicas. É possível realizar o procedimento manualmente, mas a tarefa pode se tornar muito demorada e com maior risco de erro. Assim, o ideal é utilizar a linguagem de programação do Excel para fazer todas as vinculações ao mesmo tempo.
Observação: 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 vamos reescrever o que o site da Microsoft já fez detalhadamente aqui. O objetivo desse artigo é explicar a possibilidade de vincular uma caixa de seleção a uma célula. Para as propriedades de nossas caixas de seleção (checkboxes), existem duas células importantes:
Célula de posição: célula acima da qual vamos desenhar a nossa caixa de seleção;
Célula vinculada: célula na qual vamos inserir o resultado, o valor da nossa caixa de seleção.
O fato de marcar (ou desmarcar) faz com que nossa caixa de seleção envie as menções 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). Porém, há duas soluções para esse problema com o uso de código VBA.
Quando acionado, este código VBA simples vai gerar a adição de caixas de seleção vinculadas às células situadas abaixo e selecionadas anteriormente. Para gerar o código a partir de sua pasta de trabalho, pressione as teclas Alt + F11 para abrir a janela VBA.
Agora, clique em Inserir (na barra de ferramentas) e depois em Módulo. Na janela de código que aparece, 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óstrofe 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
Observação: as linhas verdes são os comentários. Você verá neles algumas das propriedades das caixas de seleção que você poderá adicionar. Para fazer isso, basta remover o apóstrofe no início da linha do código em questão.
A partir de uma das planilhas da sua pasta de trabalho, selecione o intervalo de células onde você quer inserir as caixas de seleção e pressione as teclas Alt + F8. Em seguida, 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.
Nessa solução, vamos trabalhar com o evento Worksheet_SelectionChange. Esse evento executará automaticamente o código toda vez que você selecionar uma célula diferente na planilha em questão.
Toda 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). Caso essa célula esteja com a fonte Wingdings, o Excel inserirá um falsa caixa de seleção. Usamos aqui os caracteres þ e o que, nessa fonte, nos retorna os símbolos correspondentes a uma caixa de seleção marcada ou desmarcada.
Para inserir esse código, repita o procedimento acima (Alt + F11; Inserir > Módulo) e cole o código a seguir:
Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Restrição do intervalo. Para uma planilha inteira colocar um apóstrofe 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
Selecione as células em questão e aplique a fonte Wingdings nelas. Em seguida, clique em qualquer lugar da planilha e em cada uma das células escolhidas anteriormente.
Observação: 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á utilidade nesse caso.
Se a 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 e a marca de seleção é alternada, mas o valor vinculado não. Para desproteger uma planilha, o código VBA é:
ActiveSheet.Protect "admin" 'admin = sua senha INSIRA AQUI O SEU CÓDIGO ActiveSheet.Unprotect "admin"
Foto: © Sasirin Pamai - 123RF.com