Изменение имени группы меток ActiveX - PullRequest
0 голосов
/ 13 февраля 2020

Я создаю серию меток ActiveX для двух категорий информации в скрипте Microsoft Word VBA. Категории информации: финансовый год (FY) и доходность контракта (CY). Я создаю метки для размещения внутри обозначенных ячеек серии таблиц. Я хочу изменить названия ярлыков, чтобы они соответствовали их категории. Например, label1 будет назван FY1. Мне нужно изменить названия этих меток, чтобы они могли в конечном итоге совпадать с данными в электронной таблице Excel.

Я застреваю при переименовании (ActiveDocument.Label1.Name = "FY").

Dim num As Integer
    Dim TableNo As Integer
    Dim seq As Integer

    TableNo = ActiveDocument.Tables.Count
    num = 4
    seq = 1

'' Labels for "FY"
Do
    ActiveDocument.Tables(num).cell(6, 2).Range.InlineShapes.AddOLEControl ClassType:="Forms.Label.1"
    ActiveDocument.Label1.Name = "FY"+ seq
    seq = seq + 1
    num = num + 1
Loop Until num = TableNo + 1

'''Next Group of labels for "CY"
num = 4
seq = 1

Do
    ActiveDocument.Tables(3).cell(8, 2).Range.InlineShapes.AddOLEControl ClassType:="Forms.Label.1"
    ActiveDocument.Label1.Name = "CY"+ seq
    seq = seq + 1
    num = num + 1
Loop Until num = TableNo + 1

Есть связанная статья, но я не вижу, как примеры будут иметь отношение.

Статья по теме

** Мои ярлыки будут вставлены в 4-ю таблицу документа, поэтому я использовал num = 4.

1 Ответ

2 голосов
/ 13 февраля 2020

Элементы управления 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
...