[英]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.