【问题标题】:VBA Word - iterate through paragraphs to set styleVBA Word - 遍历段落以设置样式
【发布时间】:2018-07-21 17:44:48
【问题描述】:

我有一个简单的脚本,它通过并设置以某个字符开头的所有段落的样式。容易,我想。它会更改所有段落,因此它们具有与“详细信息”样式相同的属性。但是由于某种原因,只有最后一段以“详细信息”作为其样式,而之前的所有内容都返回“正常”。到目前为止,这是我的代码:

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 上结束。

【问题讨论】:

  • 这些建议对您有帮助吗?

标签: vba macos ms-word


【解决方案1】:

您的代码在这里运行良好。但也许这是由于 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

【讨论】:

    【解决方案2】:

    这是一种不同的方法,应该也可以工作 - 并且速度更快。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多