Можете ли вы использовать имя флажка для доступа к его значению? - PullRequest
0 голосов
/ 14 февраля 2020

Я сейчас работаю над документом Word с флажками ActiveX.

Вы можете использовать следующую строку кода для доступа к флажку:

ActiveDocument.InlineShapes(n).OLEFormat.Object

где n - целое число, представляющее позицию этого флажка в документе. К сожалению для меня, если какой-либо флажок или кнопка опции добавляются перед флажком, позиция этого флажка меняется, поэтому данный n может указывать на другой флажок.

Мой вопрос: есть ли способ заменить n на имя (или что-то еще, если его нельзя изменить, добавив новый флажок) флажка?

Спасибо в авансовый.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Можно проверить имя элемента управления 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
0 голосов
/ 14 февраля 2020

К сожалению, элементы управления ActiveX не принимают имен. Наиболее удобной альтернативой является использование подписи (текст метки появляется рядом с флажком). Вы должны использовать такой же подход, как в PowerPoint, где вы опрашиваете каждую фигуру, чтобы найти тот, который соответствует вашему критерию:

Sub GetCheckBoxValue()
    For x = 1 To ActiveDocument.InlineShapes.Count
        If ActiveDocument.InlineShapes(x).OLEFormat.Object.Caption = "ActiveX Label Text" Then
            CheckboxValue = ActiveDocument.InlineShapes(x).OLEFormat.Object.value
        End If
    Next x
End Sub
...