【问题标题】:Deleting text from Word macro从 Word 宏中删除文本
【发布时间】:2017-09-22 01:04:47
【问题描述】:

如何使用宏从 Word 中删除特定文本?

Dim ActualParagraph As Paragraph
Set ActualParagraph = Selection.Paragraphs(1)
...

我试过了

ActualParagraph.Range.Characters(1).Delete Unit:=wdCharacter

在循环中删除前 X 个字符,但问题是如果有空格,Word 会自动将其与之前的字符一起删除,因此您无法轻松计算应调用多少次 .Delete。

我试过了

ActualParagraph.Range.Delete(WdUnits.wdCharacter, 1) 

但它会删除整个段落而不考虑其中的字符数。

是否有任何可靠的方法可以指定,例如,从字符 X 删除到字符 Y 的所有内容。我在 MSDN 或其他任何地方也找不到任何有用的东西。我不想通过搜索然后删除选定的文本来删除。

谢谢

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    它可以在没有 VBA 的情况下完成。 Ctrl+H,查找:“sampleText”,替换:“”。 它会将“sampleText”替换为空。

    但是,这是在“.Text =”中使用变量的代码:

    Option Explicit
    Sub replaceSampleToNothing()
        Dim sample
        sample = "sampleText"
    
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = sample
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
    

    【讨论】:

      【解决方案2】:

      它在删除您要求的字符后删除空白的事实可能是因为“智能剪切和粘贴”选项,它会在您删除单词本身时删除单词后的空白。请参阅文件 -> 选项 -> 高级 -> 剪切、复制和粘贴部分 -> “智能剪切和粘贴”及其选项。

      另一个问题是,当给定一个非空的选择/文本范围时,Selection.Delete 会忽略您给它的计数并只是删除选择(文档对此很清楚)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多