【问题标题】:VBA word, Delete between first and second instances in every paragraphVBA单词,在每个段落的第一个和第二个实例之间删除
【发布时间】:2018-03-24 18:55:57
【问题描述】:

在 VBA word 中,我有一个文档,下面有这个文本,我需要一个 vba 宏来循环它并删除

"|不需要的文本"

从每一行,有人可以帮助我吗?

示例1 |不需要的文本 |示例2 |示例3 |例子4
你好世界
示例1 |不需要的文本 |示例2 |示例3 |例子4
你好,世界

最终结果必须是这样的:

示例1 |示例2 |示例3 |例子4
你好世界
示例1 |示例2 |示例3 |例子4
你好,世界

注意:unwanted_text 可以是任何变量字符串

【问题讨论】:

  • 您需要准确定义“|不需要的文本”实际上是什么,或者您需要解释如何查找的规则。是否用“|”分隔?如果是这样,是否会有总是正确的分隔符?
  • 您是否尝试执行相当于 Word 的“全部替换”,其中“查找内容:”是您指定的内容,而“替换为:”是一个空字符串?这似乎与“在每个段落的第一个和第二个实例之间删除”的问题标题不符。
  • 循环遍历文本:如果第二个和第四个单词是“|”然后删除第二个和第三个单词。
  • 您的每一行是否都以段落标记结束?你的“单词”会被空格分隔吗?请注意,'unwanted_text' 在 Word VBA 中显示为 三个 单词(是的,它将下划线计为一个单词)。如果你能保证只有一个真词,那就简单了。否则,如果总是用空格分隔,那么仍然很容易。
  • 是的,这只是一个单词,如果它们用空格分隔的话。

标签: vba ms-word


【解决方案1】:

以下代码将: (a) 浏览您的文件 (b) 确定是否找到模式 (c) 如果找到模式,则删除第 2 个和第 3 个单词。

    Sub Delete_Words()
    Dim oPara As Word.Paragraph

    On Error GoTo Error_Trap
    For Each oPara In ActiveDocument.Paragraphs
        If oPara.Range.Words.Count > 3 Then

            ' You can check for specific values of word 2 and 4
            ' Then could delete whatever is between
            'Debug.Print oPara.Range.Words(2).Text & " <> " & oPara.Range.Words(4).Text
            If Trim(oPara.Range.Words(2).Text) = "|" And Trim(oPara.Range.Words(4).Text) = "|" Then
                ' NOTE!! Must delete word 3 before word 2, else incorrect results!
                oPara.Range.Words(3).Delete
                oPara.Range.Words(2).Delete
            End If
        Else
            ' Not enough words
        End If
    Next
    Exit Sub
Error_Trap:
    Debug.Print "Error: " ^ Err.Number & vbTab & Err.Description
    MsgBox "Error: " ^ Err.Number & vbTab & Err.Description
End Sub

【讨论】:

    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 2021-12-11
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    相关资源
    最近更新 更多