Vba 如何使用选择。在Word';s图形对象文本框

Vba 如何使用选择。在Word';s图形对象文本框,vba,excel,ms-word,Vba,Excel,Ms Word,我试图找到Word文档中出现的所有特定单词并将其删除,但由于某种原因我不知道,它不会删除文本框中的单词 (注意:这些是从构造块插入的图形对象文本框。) 这是我的密码: Dim myRange As Range For i = LBound(arr) To UBound(arr) Set myRange = Selection.Range myRange.WholeStory myRange.Select With objWord.Selection.Find

我试图找到Word文档中出现的所有特定单词并将其删除,但由于某种原因我不知道,它不会删除文本框中的单词

(注意:这些是从构造块插入的图形对象文本框。)

这是我的密码:

Dim myRange As Range

For i = LBound(arr) To UBound(arr)

    Set myRange = Selection.Range
    myRange.WholeStory
    myRange.Select

    With objWord.Selection.Find
                        .ClearFormatting
                        .Text = arr(i)
                        .Replacement.Text = ""
                        .Forward = True
                        .Wrap = wdFindContinue
                        .MatchCase = False
                        .MatchWholeWord = False
                        .MatchWildcards = False
                        .MatchSoundsLike = False
                        .MatchAllWordForms = False
                        .Execute Replace:=wdReplaceAll
    End With

Next i
我试图添加一些代码来搜索word文档的形状,因为我在网上看到了它,但它也不起作用

看起来是这样的:

Dim myRange As Range
Dim shp As Shape

For i = LBound(arr) To UBound(arr)
    Set myRange = Selection.Range
    myRange.WholeStory
    myRange.Select
    With objWord.Selection.Find
                        .ClearFormatting
                        .Text = arr(i)
                        .Replacement.Text = ""
                        .Forward = True
                        .Wrap = wdFindContinue
                        .MatchCase = False
                        .MatchWholeWord = False
                        .MatchWildcards = False
                        .MatchSoundsLike = False
                        .MatchAllWordForms = False
                        .Execute Replace:=wdReplaceAll
    End With


For Each shp In ActiveDocument.Shapes
    If shp.Type = msoTextBox Then
        shp.Select
        With Selection.Find
                    .ClearFormatting
                    .Text = arr(i)
                    .Replacement.Text = ""
                    .Forward = True
                    .Wrap = wdFindContinue
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                    .Execute Replace:=wdReplaceAll
    End With
    End If
Next


Next i

这些类型的文本框都是绘图对象,因此您尝试使用
形状
集合是一个良好的开端。为了获得形状(图形对象)中的文本范围,需要
Shape.TextFrame.TextRange
属性

我已经从Word之外“调整”了您发布的工作代码:

  • 我完全限定了对象这个词;为了按原样使用代码,需要引用VBA项目中的Word对象库

  • 我已使用Word应用程序变量
    objWord

  • 我已将您的
    范围
    对象(myRange)替换为
    选择。查找
    并将其设置为Word文档的整个正文

  • 我将
    Find.Wrap
    设置更改为
    wdFindStop
    ,因为
    wdFindContinue
    在VBA中非常危险(它可能进入无限循环)

这会让你走的

Sub FindInTextBoxes()
    Dim myRange As Word.Range
    Dim shp As Word.Shape
    Dim shpRange As Word.Range
    Dim objWord as Word.Application

    Set objWord = GetObject(, "Word.Application")
    'Assumes the document is already open in Word

    For i = LBound(arr) To UBound(arr)
        Set myRange = objWord.ActiveDocument.Content
        With myRange.Find
                            .ClearFormatting
                            .Text = arr(i)
                            .Replacement.Text = ""
                            .Forward = True
                            .wrap = wdFindStop
                            .MatchCase = False
                            .MatchWholeWord = False
                            .MatchWildcards = False
                            .MatchSoundsLike = False
                            .MatchAllWordForms = False
                            .Execute Replace:=wdReplaceAll
        End With


        For Each shp In obWord.ActiveDocument.Shapes
            If shp.Type = Office.MsoShapeType.msoTextBox Then
                Set shpRange = shp.TextFrame.TextRange
                With shpRange.Find
                    .ClearFormatting
                    .Text = arr(i)
                    .Replacement.Text = ""
                    .Forward = True
                    .wrap = wdFindStop
                    .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                    .Execute Replace:=wdReplaceAll
                End With
            End If
        Next
    Next i
End Sub

我没有创造doc这个词。我正在处理由用户发送的转换为word文档的PDF文件。这些文本框是在adobe acrobat的转换过程中创建的。我正在使用excel vba和worddocument@CindyMeister实际上我只是注意到我复制粘贴了错误的测试。它应该是
BuildingBlockEntries(“简单文本框”)
。另外,很抱歉重复回复there@Marcucciboy2没问题:-)加上OP的图片,我找到了重要的信息。Word中至少四种不同的文本框中的哪一种出现了问题。在这个问题上,他们完全不同!