0

我正在尝试编写一个带有查找/替换字符串并将其移动到现有标题的宏。原文是这样的:

1. 标题 1

编号:abcd

1.1 标题 2

编号:abcd

它应该看起来像:

1.标题1 abcd

1.1 标题 2 abcd

我尝试编写的代码有一些问题,主要是因为我有点新,但这是我迄今为止创建的:

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Style = "Heading 2"
With Selection.Find
    .Text = "abcd"
    .Replacement.Text = "abcd^p"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = True
    .MatchSoundsLike = False
    .MatchAllWordForms = False

End With
Selection.Find.Execute Replace:=wdReplaceAll

文本不是那么重要,因为我设法用我想要的替换,但我不知道如何将它与标题样式对齐。谢谢

编辑:我希望我不要再搞砸了,对不起大:)。所以我有raw这是原始文本,我想处理它看起来像这个final。我已经发现了,感谢您如何替换文本,只是我停留在原始版本中。谢谢,我有点拥有你的啤酒,或两个

稍后编辑:所以我有 5 种标题格式,1. 标题 1、1.1 标题 2等直到 5,它们下面都有一个 ID,每个都有一个特定的数字,但名称相同,ID ASD_PC_AWP_[ XXXX]。我只需要摆脱ID ASD_PC_ 并将 AWP_[xxxx] 放在标题的同一级别,例如:1.Heading 1 AWP_[xxxx1] **,**2。标题 2 AWP_[xxx2] ...

4

2 回答 2

0

对任何后跟 ID: 的段落标记进行通配符查找。

.Text = "^13ID:"
.Replacement.Text = ""

您需要将替换文本的样式指定为标题样式,因为当您删除标题段落末尾的段落标记时,您也会删除标题段落的样式信息。

您需要对每个样式标题执行此操作,然后是 ID:文本。

2018-11-01 更新

以下代码应该可以工作。我从 Macropods 巧妙的代码中得到了一些提示。

更新 2 2018-11-01

修改为使用用户根据 OP 请求定义的样式列表

Sub ConsolidateHeadingWithID()

Const HEADINGS                                   As String = "Heading 1,Heading 2,Heading 3,Heading 4,Heading 5,Other style,another style"

Dim my_headings                                 As Variant
Dim my_heading                                  As Variant
my_headings = Split(HEADINGS, ",")

For Each my_heading In my_headings

        With ActiveDocument.StoryRanges(wdMainTextStory)

            With .Find

                .ClearFormatting
                .format = True
                .Text = ""
                .Style = my_heading
                .MatchWildcards = True
                .Wrap = wdFindStop
                .Execute

            End With

            Do While .Find.Found

                If .Duplicate.Next(unit:=wdWord).Text = "ID" Then

                    .Duplicate.Next(unit:=wdParagraph).Style = my_heading

                End If

                .Collapse wdCollapseEnd
                .MoveStart unit:=wdCharacter, Count:=2
                .Find.Execute

            Loop

        End With

        With ActiveDocument.Range.Find

            .ClearFormatting
            .format = True
            .Text = "(^13)(ID:)(*)(AWP_)([0-9]{1,})"
            .Style = my_heading
            .Replacement.Text = " [\4\5]"
            .MatchWildcards = True
            .Wrap = wdFindContinue
            .Execute Replace:=wdReplaceAll

        End With

    Next

End Sub
于 2018-10-31T12:15:10.043 回答
0

尝试:

Sub Demo()
Application.ScreenUpdating = False
Dim Rng As Range
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "ID:*^13"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
    .Execute
  End With
  Do While .Find.Found
    Set Rng = .Duplicate.GoTo(What:=wdGoToBookmark, Name:="\HeadingLevel")
    Rng.End = Rng.Paragraphs.First.Range.End - 1
    Rng.InsertAfter Split(Split(.Duplicate.Text, ":")(1), vbCr)(0)
    .Text = vbNullString
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
Application.ScreenUpdating = True
End Sub
于 2018-10-31T22:05:07.517 回答