от
Я хочу сделать Short-Key, который меняет цвет на желтый для всего, что находится внутри ContentControl. Это должен быть ContentControl, в котором я сейчас нахожусь. (Курсор находится где-то внутри этого ContentControl) Проблема в том, что вы можете просто искать ContentContros по названию и индексу, но мне это не нужно. Мне нужен код, который знает, где я нахожусь и выбрать все из ContentControl и делает его желтым. Мой код будет отмечать только одно слово, но не весь ContentConrol-Object.
Sub toggleColor()
    If Selection.Range.HighlightColorIndex = wdNoHighlight Then
        Options.DefaultHighlightColorIndex = wdYellow
        Selection.Range.HighlightColorIndex = wdYellow
    Else
        Options.DefaultHighlightColorIndex = wdNoHighlight
        Selection.Range.HighlightColorIndex = wdNoHighlight
    End If
End Sub
             

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

1 Ответ

0 голосов
от
Нет прямого способа определить, находится ли
Selection
(или
Range
) в элементе управления контентом - это можно сделать только косвенно. Например, получение
Range
выбора продлить начало
Range
назад к началу документа подсчет количества элементов управления контентом до этого момента сравнение
Range
последнего из этих элементов управления содержимым с текущим выделением с использованием метода
InRange
. Следующий код содержит функцию, которая возвращает объект управления контентом. Если функция не смогла присвоить ей элемент управления контентом, возвращаемым объектом будет
Nothing
, и вызывающая процедура ничего не выделит. В противном случае выделяется весь диапазон элемента управления контентом, в котором находится выделение.
Sub TestSelInCC()
    Dim rng As Word.Range
    Dim cc As Word.ContentControl

    Set cc = IsSelectionInCC(Selection)
    If Not cc Is Nothing Then
        Set rng = cc.Range
        rng.HighlightColorIndex = wdYellow
    End If
End Sub

Function IsSelectionInCC(sel As Word.Selection) As Word.ContentControl
    Dim rng As Word.Range
    Dim doc As Word.Document
    Dim nrCC As Long
    Dim cc As Word.ContentControl
    Dim InCC As Boolean

    InCC = False
    Set rng = sel.Range
    Set doc = rng.Parent
    rng.Start = rng.Document.content.Start
    nrCC = rng.Contentcontrols.Count
    If nrCC
...