如果满足条件,如何删除书签前的文本字符串?



首先,我在这方面是个新手。

情况如下:在生成文档时,VBA宏正在编辑Word模板。我需要通过删除一组文本字符串(a)来改进VBA宏,并用不同的文本字符串(B)替换它,条件是可以在文档中找到另一个特定的文本字符串(C)。

有一个布尔函数

Function findrange(tekst As String) As Boolean
Set place = Documents(ActiveDocument.Name).Content
If place.Find.Execute(findtext:=tekst) = True Then
findrange = True
Else
findrange = False
End If
End Function

通过它我可以识别该文本字符串(A)是否在文档中找到。到目前为止一切顺利。

我需要的是删除文本字符串(A),如果它在文档中找到,在另一个文本字符串(C)可以在文档中找到的条件下。

我该怎么做呢?我试着

If findrange("C") = True Then
If findrange("A") = True Then place.Text = ""

但是如果是True,那么显然不允许嵌套If。

您需要设置两个Range变量。

Dim rngA as Word.Range
Dim rngC as Word.Range

然后使用你的finrange函数找到文本(A),你需要将找到的范围存储在rngA变量中。

Set rngA = place.Range

接下来,使用Text(C)再次运行finrange函数,假设找到了,就可以替换rngA。文本与你的文本(B)数据。

例如:

Sub Demo()
Application.ScreenUpdating = False
Dim RngA As Range, RngB As Range
With ActiveDocument
Set RngA = .Range: Set RngB = .Range
With RngA.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "String C"
.Execute
If .Found = True Then
With RngB.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "String A"
.Replacement.Text = "String B"
.Format = False
.Forward = True
.Wrap = wdFindContinue
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End If
End With
End With
Application.ScreenUpdating = True
End Sub

最新更新