Можно проверить имя элемента управления ActiveX, но не как значение индекса коллекции, когда элемент управления находится на поверхности документа. Если вы хотите работать так, я рекомендую использовать либо устаревшие элементы управления Forms (то же место на ленте, что и в списке элементов управления ActiveX), либо флажок типа элемента управления содержимым.
Элементы управления ActiveX можно индексировать по имени, когда элемент управления находится в пользовательской форме VBA, потому что это среда, для которой были разработаны элементы управления. Word «оборачивает» их в код поля и рассматривает их как графику c, поэтому код VBA должен go через пару уровней интерфейса для доступа к ним в документе в качестве элемента управления ActiveX.
Следующий код демонстрирует, как обращаться к элементу управления ActiveX по его имени.
- L oop через коллекцию
InlineShapes
- Проверьте, является ли тип элементом управления ActiveX
- Проверьте, установлен ли флажок
- Проверьте имя объекта
Код:
Sub ActiveXControlByName()
Dim ils As Word.InlineShape
Dim cb As MSForms.CheckBox
For Each ils In ActiveDocument.InlineShapes
If ils.Type = wdInlineShapeOLEControlObject Then
If ils.OleFormat.ClassType = "Forms.CheckBox.1" Then
Set cb = ils.OleFormat.Object
If cb.Name = "cb2" Then
cb.value = False
Exit For
End If
End If
End If
Next
End Sub