我一直在使用此代码对我的单词doc中的所有标题进行粗体加下划线:
Sub Underline_Headers()
Dim p As Paragraph
For Each p In ActiveDocument.Paragraphs
If Len(p.Range.Text) < 70 Then
p.Range.Font.Underline = True
p.Range.Font.Bold = True
End If
Next p
End Sub
这很有效 - 只要每个标题长度少于70个字符,并且其下面的段落是70个或更多字符。
但很多时候标题可以超过70个字符,标题下的段落可以少于70个字符。
然而,标题永远不会以任何标点符号结束,例如&#34;。&#34;但是他们下面的段落总是如此。
我正在尝试修复上面的代码,以查找未以&#34;结尾的所有段落。&#34;然后加粗 - 强调它们。换句话说,我想改变规则。
我尝试了唯一对我有意义的事情。代码没有破坏,但最终以粗体为下划线整个文档:
Sub Underline_Headers()
Dim p As Paragraph
For Each p In ActiveDocument.Paragraphs
If Right(p.Range.Text,1) <> "." Then
p.Range.Font.Underline = True
p.Range.Font.Bold = True
End If
Next p
End Sub
这应该会查找最后一个字符不是&#34;。&#34;的所有段落,如果有效,将隔离所有标题并且只加粗 - 加下划线,但显然不会工作
答案 0 :(得分:1)
每个段落中的最后一个字符是回车符,Chr(13)。在此之前,文本结束了一个字符。下面的代码还考虑了某人用一个或多个空格结束段落文本的可能性。它接受“clean”字符串并查找可能异常字符串中的最后一个字符,例如.?!
。您可以将此字符串缩减为单个句点,或将其扩展为包含更多用于例外的cnadidates。
Private Sub UnderlineTitles()
Dim Para As Paragraph
Dim Txt As String
Application.ScreenUpdating = False
For Each Para In ActiveDocument.Paragraphs
Txt = Para.Range.Text
Txt = RTrim(Left(Txt, Len(Txt) - 1))
' you can extend the list to include characters like ")]}"
If InStr(".?!", Right(Txt, 1)) = 0 Then
' to choose a different style of underline, remove
' "= wdUnderlineSingle", type "=" and select from the dropdown
Para.Range.Font.Underline = wdUnderlineSingle
End If
Next Para
Application.ScreenUpdating = True
End Sub