繁体   English   中英

确保替换文本功能只查看特定的 Word 表格 VBA

[英]Ensure Replace Text function only looks at a specific Word table VBA

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

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

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()指定表的数量似乎不起作用。 我确信我做的基本上是错误的,代码只需要一点点修补。 不过,我只是一个新手开发者学习。

试试

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM