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又一次,只有我的在工作…奇怪。。。