使用word宏删除基于子字符串的特定段落 [英] Delete specific paragraphs based on substring using word macro

查看:290
本文介绍了使用word宏删除基于子字符串的特定段落的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一个MS Word宏来搜索整个文档中每个段落中的特定子字符串,并删除不包含该字符串的段落。



I试过这个宏代码:



  Sub  DeleteParagraphContainingString()

Dim search As String
search = 删除我

Dim para As 段落
对于 每个 para ActiveDocument.Paragraphs

Dim txt As String
txt = pa ra.Range.Text

如果 InStr(LCase(txt),搜索)然后
para.Range.Delete
结束 如果

下一步

结束 Sub





但它虽然它有该子字符串,但删除所有段落。我没有任何线索在代码中哪里出错。

解决方案

要做的步骤:



  1. 循环收集段落
  2. 检查段落是否包含搜索字符串


    1. 如果包含,请跳至下一段
    2. 如果没有,删除







样本代码:

 选项 明确 

Sub SearchAndDestroy()
Dim p As 段落
Dim searchingText As String

On 错误 GoTo Err_SearchAndDestroy

searchingText = 删除我
对于 每个 p ThisDocument.Paragraphs
如果 InStr(< span class =code-digit> 1 ,p.Range.Text,searchingText,vbBinaryCompare)> 0 然后 GoTo SkipNext
p.Range.Delete单位:= wdParagraph,计数:= 1
SkipNext:
下一步

Exit_SearchAndDestroy:
退出 Sub

Err_SearchAndDestroy:
MsgBox Err。说明,vbExclamation,Err.Number
恢复 Exit_SearchAndDestroy
结束


I need a MS Word Macro that would search for a specific substring in every paragraph throughout the document and delete paragraphs that don't contain that string.

I tried this macro code:

Sub DeleteParagraphContainingString()

       Dim search As String
       search = "delete me"

       Dim para As Paragraph
       For Each para In ActiveDocument.Paragraphs

           Dim txt As String
           txt = para.Range.Text

           If Not InStr(LCase(txt), search) Then
               para.Range.Delete
           End If

       Next

   End Sub



But it deletes all the paragraph though it has that subtring. I don't have any clue where is the wrong in the code.

解决方案

Steps to do:


  1. Loop through the collection of paragraphs
  2. Check if paragraph contains searched string

    1. if contains, skip to next paragraph
    2. if not, delete




Sample code:

Option Explicit

Sub SearchAndDestroy()
Dim p As Paragraph
Dim searchedText As String

On Error GoTo Err_SearchAndDestroy

searchedText = "Delete me"
For Each p In ThisDocument.Paragraphs
    If InStr(1, p.Range.Text, searchedText, vbBinaryCompare) > 0 Then GoTo SkipNext
    p.Range.Delete Unit:=wdParagraph, Count:=1
SkipNext:
Next

Exit_SearchAndDestroy:
    Exit Sub

Err_SearchAndDestroy:
    MsgBox Err.Description, vbExclamation, Err.Number
    Resume Exit_SearchAndDestroy
End Sub


这篇关于使用word宏删除基于子字符串的特定段落的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆