Excel упаковывает каждый объект ActiveX в элемент управления OLEObject, который затем переносится в объект Shape.
При итерации по Worksheets().Shapes
вам нужно будет ссылаться на Shape..Object.Object.Value
ThisWorkbook.Sheets(4).Cells(i, 1).Value = cb.OLEFormat.Object.Object.Value
Было бы более простым циклически проходить по коллекции Worksheets().OLEObjects
.
Sub CheckboxLoop17_OLEObjects()
Dim ctrl As OLEObject
Dim i As Long
i = 1
'Loop through Checkboxes
For Each ctrl In ThisWorkbook.Sheets(1).OLEObjects
ThisWorkbook.Sheets(4).Cells(i, 1).Value = ctrl.Object.Value
ThisWorkbook.Sheets(4).Cells(i, 2).Value = ctrl.Name
ThisWorkbook.Sheets(4).Cells(i, 3).Value = ctrl.BottomRightCell.Address
ThisWorkbook.Sheets(4).Cells(i, 4).Value = ctrl.progID
i = i + 1
Next
End Sub
Если у вас есть элементы управления как Form, так и ActiveX, вам нужно будет проверить, какой вы типработа с.
Sub MixedFormsAndActiveX()
Dim sh As Shape
Dim i As Long
For Each sh In ThisWorkbook.Sheets(1).Shapes
i = i + 1
With ThisWorkbook.Sheets(4)
If sh.Type = msoOLEControlObject Then
.Cells(i, 1).Value = sh.OLEFormat.Object.Object.Value
.Cells(i, 4).Value = "ActiveX Control: " & TypeName(sh.OLEFormat.Object.Object)
ElseIf sh.Type = msoFormControl Then
.Cells(i, 1).Value = sh.ControlFormat.Value
.Cells(i, 4).Value = "Forms Control: " & TypeName(sh.ControlFormat)
End If
.Cells(i, 2).Value = sh.Name
.Cells(i, 3).Value = sh.BottomRightCell.Address
End With
Next
End Sub