当前位置: 首页 > 知识库问答 >
问题:

VBA删除文本框中的图片

易星宇
2023-03-14

所以我有一个包含图片和标题的文本框文档。我写了一个代码来循环遍历对象,检查对象是否是文本框,如果是,复制标题的文本,清除文本框,用更新的图片替换图片,并重新插入标题。

然而,该文件已经进行了引用标题的交叉引用。所以当我重新插入标题时,交叉引用不再起作用。我想我可以通过删除每个文本框中的图片来解决这个问题,这样标题就可以保留,交叉引用也可以工作。

不过,我不确定如何在代码中引用图片。任何帮助都将不胜感激!

 For Each objShape In ActiveDocument.Shapes
    If objShape.Type = msoTextBox Then

       str = objShape.TextFrame.TextRange.Text
        If InStr(str, "(") > 0 Then
            captionTag = BetweenParentheses(str)
            If captionTag = imageTag Then
                If InStr(str, "Figure") > 0 Then

                   'problem area
                    Dim objPic As Word.InlineShapes
                    objPic.Delete


                   'does stuff
                    Dim firstTerm As String
                    Dim secondTerm As String
                    Dim caption As String
                    Dim caption2 As String

                    firstTerm = ":"
                    secondTerm = ")"

                    Dim startPos As Long
                    Dim stopPos As Long
                    Dim nextPosition As Long
                    nextPosition = 1

                    caption = objShape.TextFrame.TextRange


                    Do Until nextPosition = 0
                        startPos = InStr(nextPosition, caption, firstTerm, vbTextCompare) + 1
                        stopPos = InStr(startPos, caption, secondTerm, vbTextCompare) + 1
                        caption = Mid$(caption, startPos + Len(firstTerm), stopPos - startPos - Len(firstTerm))
                        nextPosition = InStr(stopPos, caption, firstTerm, vbTextCompare)
                   Loop



                    Set rng = objShape.TextFrame.TextRange
                    Set picture = rng.InlineShapes.AddPicture(fileName:=fullPath, LinkToFile:=False, SaveWithDocument:=True)
                    picture.ScaleHeight = 29.5 
                    picture.ScaleWidth = 29.5
                    rng.InsertCaption Label:="Figure", Title:=": " & caption, position:=wdCaptionPositionBelow, ExcludeLabel:=False

                    With objShape.TextFrame
                        .TextRange.Font.Name = "Calibri Light"
                        .TextRange.Font.Size = 9
                        .TextRange.Font.Color = RGB(79, 129, 189)
                    End With
                    'Next objPic
                End If
            End If
        End If
    End If

Next objShape

共有2个答案

方俊
2023-03-14

好的,所以解决方法很简单。。。现在我不必重新插入标题,引用仍然存在。

 Set rng = objShape.TextFrame.TextRange
 rng.InlineShapes(1).Delete
 Set picture = rng.InlineShapes.AddPicture(fileName:=fullPath, LinkToFile:=False, SaveWithDocument:=True)
朱博实
2023-03-14

使用该形状。填充特性

这将返回用于添加或删除图片的FillFormat对象。

'This will clear the existing picture
objShape.Fill.Solid

'This will set a picture using a path
objShape.Fill.UserPicture ("C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg")

参考:

  • 填充格式成员(Word)
 类似资料:
  • 我无法解释,因为所有其他select和insert语句都工作得很好。

  • 有没有一种方法可以完全删除TextField的边框?例如,我想显示该文本中的文本:

  • 我正在尝试用getelementbyclassname()填充这个文本框。值但是不管用。它只有在我使用innertext时才有效,但这不是我想要的,因为它对文本进行了硬编码。我该如何处理这个元素以便向它传递文本呢? VBA:

  • 我有picturebox,我尝试编写代码,当用户加载另一个图像到picturebox,旧文件,在图片中被删除。我试图找到24小时的解决方案,但我没有找到完全有效的解决方案。 我正在犯错误

  • 我正在尝试编写一个宏,它将循环遍历大量的行(一个特定的列),如果找到一个特定的单词,则删除文本。不幸的是,我没有取得任何进展,并希望社区可以帮助。 该行的一个示例是 “一”lorem ipsum dolor sit amet,consectetur adipiscing elit“六十六”sed do eusmod tempor incidunt ut labore et dolore magna

  • $format = new \Vtiful\Kernel\Format($fileHandle); $style = $format->strikeout()->toResource();