Элементы управления ActiveX были разработаны для использования в пользовательских формах VBA. Сделать их способными вставлять на поверхность документов Office было чем-то запоздалым. Включение поведения UserForm включает в себя некоторые «magi c» со стороны Word.
На поверхности документа Word управление ActiveX осуществляется через поле Control
, которое можно увидеть, нажав Alt + F9 для включения кодов полей. Метод AddOLEControl
генерирует поле и, так сказать, подключает трубопровод.
Но что касается Word, он не «видит» элемент управления ActiveX, он работает с кодом поля и отображает результат поля, который представляет собой изображение , либо член коллекции InlineShapes
, либо Shapes
.
При взаимодействии с элементом управления ActiveX на поверхности документа, поэтому необходимо пройти через объект graphi c, чтобы перейти к «реальному элементу управления».
Следующий пример кода иллюстрирует - просто замените Range
, с которым вам нужно работать, на Selection.Range
(используется для простоты и для того, чтобы образец кода был доступен для всех, читающих эти вопросы и ответы).
Метод AddOLEControl
запускается в коллекции InlineShapes
, поэтому он возвращает объект InlineShape
. MSForms.Label
объект установлен на OLEFormat.Object
InlineShape - это то, что обеспечивает соединение с интерфейсом программирования элемента управления. Благодаря этому можно получить доступ к свойствам, которые находятся в окне свойств для элемента управления.
Sub InsertRenameActiveX()
Dim ctl As MSForms.Label
Dim ils As Word.InlineShape
Set ils = Selection.Range.InlineShapes.AddOLEControl(ClassType:="Forms.Label.1")
Set ctl = ils.OleFormat.Object
ctl.Name = "FY" & "3"
ctl.Caption = "test"
End Sub