VBA WORD:删除双段落标记

VBA WORD:删除双段落标记,vba,ms-word,Vba,Ms Word,试图通过此过程移动过多的段落间距 Sub RemoveGaps() wrdDoc.Content.Select Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^13^13" .Replacement.Text = "^p" .Forward = True

试图通过此过程移动过多的段落间距

Sub RemoveGaps()
    wrdDoc.Content.Select

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    With Selection.Find
        .Text = "^13^13"
        .Replacement.Text = "^p"

        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = True
    End With

    Selection.Find.Execute Replace:=wdReplaceAll
    If Selection.Find.Found = True Then
        Call RemoveGaps
    End If

End Sub
在我运行它之后,循环永远不会结束,我在文档的底部以这种形式结束。请注意,它确实工作了一段时间,然后就卡住了

编辑:我在结尾处有两个段落分隔符,它们只是替换为另外两个。事实上,我手动选择并替换了它们。同样,出于某种原因,它们只是替换为一个额外的。我不知道这是怎么回事,也许是一个不同的特殊角色?

试试这个

Sub RemoveGaps()
    wrdDoc.Content.Select

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    With Selection.Find
        .Text = "^p^p" '<~~~ See this
        .Replacement.Text = "^p"

        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = False '<~~ Set this to false
    End With

    Selection.Find.Execute Replace:=wdReplaceAll

    If Selection.Find.Execute = True Then
        Call RemoveGaps
    End If
End Sub
Sub-RemoveGaps()
wrdDoc.Content.Select
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
选择。查找
.Text=“^p^p””试试这个

Sub RemoveGaps()
    wrdDoc.Content.Select

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    With Selection.Find
        .Text = "^p^p" '<~~~ See this
        .Replacement.Text = "^p"

        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = False '<~~ Set this to false
    End With

    Selection.Find.Execute Replace:=wdReplaceAll

    If Selection.Find.Execute = True Then
        Call RemoveGaps
    End If
End Sub
Sub-RemoveGaps()
wrdDoc.Content.Select
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
选择。查找

.Text=“^p^p””您不需要启动整个sub,只需返回以下几行:

Sub RemoveGaps()
Dim wrdDoc As Document
Set wrdDoc = ActiveDocument
    wrdDoc.Content.Select

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    With Selection.Find
        'oryginal
        .Text = "^13^13"
        .Replacement.Text = "^p"
        .Forward = True

    End With

GoHere:
    Selection.Find.Execute Replace:=wdReplaceAll

    If Selection.Find.Execute = True Then
        GoTo GoHere
    End If

End Sub

我对它进行了测试,它与我的Word 2010配合得很好。

您不需要启动整个潜艇,但可以返回以下几行:

Sub RemoveGaps()
Dim wrdDoc As Document
Set wrdDoc = ActiveDocument
    wrdDoc.Content.Select

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    With Selection.Find
        'oryginal
        .Text = "^13^13"
        .Replacement.Text = "^p"
        .Forward = True

    End With

GoHere:
    Selection.Find.Execute Replace:=wdReplaceAll

    If Selection.Find.Execute = True Then
        GoTo GoHere
    End If

End Sub
Sub RemoveGaps()

    Dim oFnd As Find

    Set oFnd = ThisDocument.Content.Find
    oFnd.ClearFormatting
    oFnd.Replacement.ClearFormatting

    With oFnd
        .Text = "^13^13"
        .Replacement.Text = "^p"

        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = True
    End With

    Do
        oFnd.Execute Replace:=wdReplaceAll
    Loop Until Not oFnd.Execute Or oFnd.Parent.End = ThisDocument.Content.End

End Sub
我测试了它,它与我的Word 2010配合得很好

Sub RemoveGaps()

    Dim oFnd As Find

    Set oFnd = ThisDocument.Content.Find
    oFnd.ClearFormatting
    oFnd.Replacement.ClearFormatting

    With oFnd
        .Text = "^13^13"
        .Replacement.Text = "^p"

        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .MatchWildcards = True
    End With

    Do
        oFnd.Execute Replace:=wdReplaceAll
    Loop Until Not oFnd.Execute Or oFnd.Parent.End = ThisDocument.Content.End

End Sub
我不知道KazJaw的工作原理——它仍然在末尾留下两个段落标记,但Execute返回False。当我到达最后一个GoTo时,我会在即时窗口中看到这个

?selection.Find.Execute
False
?selection = string(2,chr$(13))
True
为什么它找不到两辆马车,而这就是全部?古怪的无论如何,我不喜欢更改选择或转到,所以我包括了我的版本。当Find找不到任何内容或位于文档末尾时,它将退出

如果你知道一行有多少段落的上限,你可以用另一种方法。例如,如果您知道空白段落不超过10个,您可以这样做:

Sub RemoveGaps2()

    Dim i As Long

    For i = 10 To 2 Step -1
        With ThisDocument.Content.Find
            .Text = "[^13]{" & i & ",}"
            .Replacement.Text = Chr$(13)
            .MatchWildcards = True
            .Execute , , , , , , , , , , wdReplaceAll
        End With
    Next i

End Sub
我不知道KazJaw的工作原理——它仍然在末尾留下两个段落标记,但Execute返回False。当我到达最后一个GoTo时,我会在即时窗口中看到这个

?selection.Find.Execute
False
?selection = string(2,chr$(13))
True
为什么它找不到两辆马车,而这就是全部?古怪的无论如何,我不喜欢更改选择或转到,所以我包括了我的版本。当Find找不到任何内容或位于文档末尾时,它将退出

如果你知道一行有多少段落的上限,你可以用另一种方法。例如,如果您知道空白段落不超过10个,您可以这样做:

Sub RemoveGaps2()

    Dim i As Long

    For i = 10 To 2 Step -1
        With ThisDocument.Content.Find
            .Text = "[^13]{" & i & ",}"
            .Replacement.Text = Chr$(13)
            .MatchWildcards = True
            .Execute , , , , , , , , , , wdReplaceAll
        End With
    Next i

End Sub

不起作用:(同一个问题我在结尾有两个段落分隔符,它们只是替换为另外两个。我实际上手动尝试选择并替换它们。同样的,出于某种原因,它们只是替换为一个额外的。知道这是怎么回事吗?不起作用:(同样的问题,我在结尾有两个段落中断,它们只是替换为另外两个。我实际上手动尝试选择并替换它们。同样的事情,出于某种原因,它们只是替换为一个额外的。知道这是怎么回事吗?一个提示,可能很奇怪……我复制了你的sub,但它不起作用。然后Siddharth的就不起作用了。)k、 同样。然后我创建了我的。我做了一些其他的事情,关闭了应用程序并再次尝试了所有的子例程。所有的子例程都开始按预期工作-你的、Siddhard的和我的…不知道为什么…好的提示!似乎正在工作。我仍然有那个奇怪的段落标记字符串,但它们只是在最后,循环没有停止t卡住了。所以在这里!虽然现在它似乎出于某种原因删除了我的内联图片!?知道这是怎么回事吗?没关系..我回到^13通配符,它就起作用了…呜呜!你的模块中有三个sub还是只有一个sub?我刚刚再次打开文档,只有我的才起作用…奇怪…一个提示,可能是strange…我复制了你的sub,但它不起作用。然后Siddhart的也不起作用。然后我创建了我的sub,它起作用了。我做了一些其他事情,关闭了应用程序,然后再次尝试了所有sub。所有的子程序都开始按预期工作-你的、Siddhard的和我的…不知道为什么…好提示!似乎在工作。我仍然有那个奇怪的stri段落标记为ng,但它们只是在结尾,循环不会被卡住。所以在这里!虽然现在它似乎出于某种原因删除了我的内联图片!?知道这是怎么回事吗?无需担心..我回到^13通配符,它刚刚起作用…呜呼!你的模块中有所有三个sub还是只有一个sub?我刚刚打开了docum又一次,只有我的在工作…奇怪。。。