【问题标题】:Ensure Replace Text function only looks at a specific Word table VBA确保替换文本功能仅查看特定的 Word 表 VBA
【发布时间】:2018-08-24 23:49:38
【问题描述】:

我有一个 Word 表,我在其中应用了一个用逗号和空格替换段落标记的例程。但是,在这样做的过程中,现在出现了一些文本,例如“..., There...”,我的客户希望尽可能地将大写字母替换为小写字母。

所以,我编写了一些从上一个例程中调用的辅助代码,如下所示:

Sub LowerCaseAfterComma()
    With Selection.Find
       .ClearFormatting
       .Text = ", ([A-Z])"
       .Forward = True
       .Wrap = wdFindStop
       .Format = True
       .MatchCase = False
       .MatchWholeWord = False
       .MatchWildcards = True
       .MatchSoundsLike = False
       .MatchAllWordForms = False
       .Execute 
    While .Found
        Selection.Range.Case = wdLowerCase
        Selection.Collapse Direction:=wdCollapseEnd
        .Execute
    Wend
  End With
End Sub

虽然这会识别表中大写字符的实例并相应地替换它们,但代码会在文档中查找表之外的所有其他实例,我不希望代码这样做。我已经尝试在 Word 中将 Range 对象用于我要编辑的表格,但在所需的语法方面没有成功。

注意。我在确保编辑保留在特定表内时遇到问题。在我希望编辑的表格之前可能有不同数量的表格 ActiveDocument.Tables() 指定表的编号似乎不起作用。 我确信我做的一些基本上是错误的,代码只需要一点修补。不过,我只是一个新手开发者学习。

【问题讨论】:

    标签: vba ms-word


    【解决方案1】:

    试试

    Sub Demo()
    Application.ScreenUpdating = False
    Dim Rng As Range
    With ActiveDocument.Tables(1)
      Set Rng = .Range
      With .Range
        With .Find
          .ClearFormatting
          .Replacement.ClearFormatting
          .Text = ", ([A-Z])"
          .Replacement.Text = ""
          .Forward = True
          .Wrap = wdFindStop
          .Format = False
          .MatchWildcards = True
          .Execute
        End With
        Do While .Find.Found
          If .InRange(Rng) Then
            .Case = wdLowerCase
          Else
            Exit Do
          End If
          .Collapse wdCollapseEnd
          .Find.Execute
        Loop
      End With
    End With
    Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

    • 您包含的范围语句我已经尝试过,但是 Do While 和 Loop 中的额外代码解决了我的问题。对我来说,Word 中的查找和替换功能并没有我想的那么清晰,但我在研究这个主题方面学到了很多东西......这就是它的全部意义所在。
    • 您需要了解 Word 中的查找和替换功能是,如果找到某些内容,则当前 Range 将重新定位到找到的范围。因此,预先将指定范围存储在 Rng 中,然后通过 .InRange(Rng) 测试我们是否仍在其中,这样可以在 .InRange(Rng) 变为 false 时退出代码。
    猜你喜欢
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多