MSForms controls
foreach (Shape s in ws.Shapes)
{
//s.FormControlType.ToString();
}
foreach (Shape s in ws.Shapes)
{
//s.OLEFormat.progID.ToString();
}
Even though they are shapes in Excel, they are actually all OLEObjects for C# and it's better to treat them that way too (less casting cause COM treats them originally as Ole Objects, Shape is Excel's convenience etc). In case you wondered;
foreach (OLEObject obj in ws.OLEObjects())
{
// obj.progID.ToString();
}
You probably need a switch statement next so you know which control you're dealing with as you have aptly noticed the checkbox does not have a ListFillRange property but Value and Labels have Caption instead of value etc.