Как вы можете изменить цвет текущего ContentControl-Object? - PullRequest
2 голосов
/ 04 июля 2019

Я хочу создать 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 голосов
/ 04 июля 2019

Нет прямого способа определить, находится ли 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 > 0 Then
        If sel.InRange(doc.Contentcontrols(nrCC).Range) Then
            InCC = True 'Debug.Print ("Sel in cc")
            Set cc = doc.Contentcontrols(nrCC)
        Else
            sel.MoveEnd wdCharacter, 1
            If Len(sel) = 0 Then
                'Debug.Print ("Sel at end of cc")
                InCC = True
                Set cc = doc.Contentcontrols(nrCC)
            End If
        End If
    End If
    Set IsSelectionInCC = cc
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...