2011-06-18 58 views
2

请原谅手握,我确信我需要在这个问题上。我对Visual Basic很少有经验。循环查找和删除行宏

这是我想要做的:我在Word 2011(Mac)中有一个大表,并且我需要在表中找到某个字符串并删除包含它的行。好的,通过录制宏来解决这个问题没有问题。但是,我想让宏查找所有实例并一次删除所有行,而不必一遍又一遍地运行宏(除此之外,在找到所有实例之后,哑宏将删除所在的行当前游标即使该字符串不在该行中!)。我假设我需要一些while while循环,但我不知道如何对Selection.Find进行布尔测试 - 如果这就是我需要做的!

在此先感谢。从评论

编辑代码复制,粘贴和格式化:

Sub Macro2() ' ' Macro2 Macro ' ' 
    Selection.Find.ClearFormatting 
    With Selection.Find 
     .Text = "pull from" 
     .Replacement.Text = "Pain" 
     .Forward = True 
     .Wrap = wdFindContinue 
     .Format = False 
     .MatchCase = False 
     .MatchWholeWord = False 
     .MatchWildcards = False 
     .MatchSoundsLike = False 
     .MatchAllWordForms = False 
    End With 
    Selection.Find.Execute 
    Selection.Rows.Delete 
End Sub 
+0

请添加代码 – BugFinder

+0

在这里你去: '子Macro2() ' ' Macro2宏 ' ' Selection.Find.ClearFormatting 随着Selection.Find 。文本= .Replacement “从拉” 。文本= “疼痛” 的.forward =真 .Wrap = wdFindContinue .Format =假 .MatchCase =假 .MatchWholeWord =假 .MatchWildcards =假 .MatchSoundsLike =假 个.MatchAllWordForms =假 尾随着 Selection.Find.Execute Selection.Rows.Delete 结束小组 ' – sethwalt

+0

在这样的评论。请不要把大量代码。阅读真的很痛苦。把它放在你的问题的正文中。这次我会为你做。 –

回答

1

所以,我发现了另一个论坛上一个答案,我想我会在这里发布:

With ThisDocument.Tables(1) 
For r = .Rows.Count To 1 Step -1 
     fnd = False 
     For Each c In .Rows(r).Cells 
      If InStr(c.Range.Text, "x") > 0 Then fnd = True 
     Next 
     If fnd Then .Rows(r).Delete 
    Next 
End With 

其中“ x“是要搜索的文本。

为我工作,虽然需要一些时间来循环250行左右的表格,所以起初我以为Word已经冻结了。另外,我输入的文本字符串(“x”)在首先找到全部大写的文本字符串时遇到了麻烦,所以我必须将搜索字符串放在大写字母中。

此外,我发现这个宏不起作用,除非它被复制到需要运行的word文档中。如果将此文档更改为ActiveDocument,则只有在Normal模板中才能使用该文档。

无论如何,希望它能帮助别人!