【问题标题】:Selecting word text in a for loop在 for 循环中选择单词文本
【发布时间】:2014-05-24 23:04:35
【问题描述】:

我创建了这段代码来搜索我的 word 文档并找到单词 APPENDIX3,如果找到,删除它和它之前的空格(在这种情况下是分节符)。然后它将数字 3 减去 1 并返回到 for 循环的顶部并搜索 APPENDIX2 并删除我想要的东西。它循环了 3 次,在 APPENDIX1 结束。唯一的问题是它只删除了 APPENDIX3 的东西。如果我重新运行宏,它将删除 APPENDIX2 并且只删除 APPENDIX2。以此类推。它正在增加,但选择似乎没有被清除。关于如何修改我的代码以每次循环并选择不同的文本有什么建议吗?

Sub RemoveAppendices()
Dim i As Integer
Application.ScreenUpdating = False
Selection.HomeKey Unit:=wdStory
'Cntr = 3
'For i = 1 To 3
For i=3 to 1 step -1
    With Selection.Find
        .ClearFormatting
        .Text = "APPENDIX" & Cntr
        If Selection.Find.Execute Then
            Selection.Select
            Selection.Delete
            With Selection
                .EndKey Unit:=wdStory
                .TypeBackspace
                .Delete
            End With
        End If
    End With
    'Cntr = Cntr - 1

Next i
End Sub

【问题讨论】:

  • 删除集合的任何部分时,您应该从最后一项运行循环到第一项。因此尝试类似For i=3 to 1 step -1。此外,您可以使用i,而不是Cntr = Cntr -1
  • 我修改了上面的代码以反映您的更改,它确实更有效(非常感谢),但是清除找到的初始文本并找到下一个文本值并通过 If 运行此选择的问题声明仍未解决。

标签: vba ms-word word-2007


【解决方案1】:

想通了。我需要在循环中而不是在循环之前转到页面顶部,或者我必须在查找期间包装文本搜索。更新后的脚本如下所示:

Sub RemoveAppendices()
Dim i As Integer
For i = 3 To 1 Step -1
    'Selection.HomeKey Unit:=wdStory 'this would also work but I like wrap better
    With Selection.Find
        .Wrap = wdFindContinue
        .Text = "APPENDIX" & i
        .MatchWholeWord = True
        .MatchCase = True
        If Selection.Find.Execute Then
            Selection.Select
            Selection.Delete
            With Selection
                .EndKey Unit:=wdStory
                .TypeBackspace
                .Delete
            End With
        End If
    End With
Next i
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-02
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多