riwerson,
Adicione as rotinas abaixo em um novo módulo.
Se estiver utilizando controles de Formulário, experimente :
Sub validaSelecaoFormulario()
Dim ctlChk As Shape
Dim contItens As Long
Dim novaLinha As Long, novaColuna As Long
Dim retornaSelecionados() As String
contItens = 0
Erase retornaSelecionados
With ThisWorkbook.Sheets(1)
For Each ctlChk In ThisWorkbook.Sheets(1).Shapes
If ctlChk.Name Like "*Check Box*" And ctlChk.ControlFormat.Value = 1 Then
contItens = contItens + 1
ReDim Preserve retornaSelecionados(contItens)
'ctlchk.Name = retorna nome do controle
'ctlChk.AlternativeText = retorna o texto do controle
retornaSelecionados(contItens) = ctlChk.AlternativeText
End If
Next
End With
With ThisWorkbook.Sheets(2)
novaColuna = 0
novaLinha = .Cells(Rows.Count, 1).End(xlUp).Row + 1
While Not novaColuna = contItens
novaColuna = novaColuna + 1
.Cells(novaLinha, novaColuna) = retornaSelecionados(novaColuna)
Wend
End With
End Sub
Sub limpaSelecaoFormulario()
Dim ctlChk As Shape
With ThisWorkbook.Sheets(1)
For Each ctlChk In ThisWorkbook.Sheets(1).Shapes
If ctlChk.Name Like "*Check Box*" And ctlChk.ControlFormat.Value = 1 Then
ctlChk.ControlFormat.Value = -4146
End If
Next
End With
End Sub
Caso esteja utilizando controles ActiveX, experimente :
Sub validaSelecaoActiveX()
Dim ctlChk As OLEObject
Dim contItens As Long
Dim novaLinha As Long, novaColuna As Long
Dim retornaSelecionados() As String
contItens = 0
Erase retornaSelecionados
With ThisWorkbook.Sheets(1)
For Each ctlChk In .OLEObjects
If TypeName(ctlChk.Object) = "CheckBox" And ctlChk.Object.Value = True Then
contItens = contItens + 1
ReDim Preserve retornaSelecionados(contItens)
retornaSelecionados(contItens) = ctlChk.Object.Caption
End If
Next
End With
With ThisWorkbook.Sheets(2)
novaColuna = 0
novaLinha = .Cells(Rows.Count, 1).End(xlUp).Row + 1
While Not novaColuna = contItens
novaColuna = novaColuna + 1
.Cells(novaLinha, novaColuna) = retornaSelecionados(novaColuna)
Wend
End With
End Sub
Sub limpaSelecaoActiveX()
Dim ctlChk As OLEObject
With ThisWorkbook.Sheets(1)
For Each ctlChk In .OLEObjects
If TypeName(ctlChk.Object) = "CheckBox" Then
ctlChk.Object.Value = False
End If
Next
End With
End Sub
Espero ter ajudado.
Abs.
Saulo Robles
Postado : 15/10/2019 2:08 pm