我想制作一个快捷键,它可以将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
答案 0 :(得分:0)
没有直接的方法来确定Selection
(或Range
)是否在内容控件中-只能间接完成。例如,
Range
Range
的 start 扩展回文档的开头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