我有一个简单的脚本,它会遍历并设置以某个字符开头的所有段落的样式。容易,我想。它将更改所有段落,使其具有与“详细信息”样式相同的属性。但是出于某种原因,只有最后一段以“ Details”作为样式结尾,而所有段落都回到“ Normal”。到目前为止,这是我的代码:
Sub Format_doc()
Dim txt As String
For Each par In ActiveDocument.Paragraphs
txt = par.Range.Text
If Left(txt, 1) = "/" Then
par.Style = "Details"
par.Range.Text = Right(txt, Len(txt) - 1)
End If
Next
End Sub
我想使它们与样式保持联系,因为我在另一个宏中切换了“隐藏”字体属性。我需要多次为这些段落切换此隐藏属性,并且分配单个段落样式似乎是一个简单的解决方案。这是其他代码:
Sub Toggle_hidden()
ActiveDocument.Styles("Details").Font.Hidden = Not ActiveDocument.Styles("Details").Font.Hidden
End Sub
解决方案?我在Mac上工作,但最终它将在Windows上结束。
答案 0 :(得分:0)
您的代码在这里工作正常。但这可能是由于MacWord的版本...我在Office 2016(Office 365订阅)中进行了测试。
如果它对您不起作用,则可能与您通过基本上替换段落内容来删除/
的方式有关。这也会影响段落标记,该段落标记负责段落格式(包括样式)的格式化。请尝试以下操作,该操作将显式删除第一个字符并使其他所有内容保持不变:
Sub Format_doc()
Dim txt As String
Dim par As Word.Paragraph
For Each par In ActiveDocument.Paragraphs
txt = par.Range.Text
If Left(txt, 1) = "/" Then
par.Style = "Details"
'par.Range.Text = Right(txt, Len(txt) - 1)
par.Range.Characters(1).Delete
End If
Next
End Sub
答案 1 :(得分:0)
这是另一种方法,也应该可行-并且速度更快。
Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "^p/"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindStop
.Format = False
.MatchWildcards = False
.Execute
End With
Do While .Find.Found
With .Duplicate
.Start = .Start + 1
.End = .Paragraphs(1).Style = "Details"
End With
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With
Application.ScreenUpdating = True
End Sub