2015-07-15 6 views
1

Итак, у меня есть документ с текстовыми полями, которые содержат изображение и подпись. Я написал код для прокрутки объектов, проверьте, является ли объект текстовым полем, и если да, копирует текст надписи, очищает текстовое поле, заменяет изображение обновленным и вставляет надпись.VBA удалить изображение в текстовом поле

Однако в документе уже сделаны перекрестные ссылки, в которых указаны подписи. Поэтому, когда я снова вставляю титры, перекрестные ссылки больше не работают. Я думаю, что я могу решить эту проблему, удалив только изображение внутри каждого текстового поля, поэтому надпись остается и перекрестные ссылки работают.

Я не уверен, как ссылаться на изображение, хотя в моем коде. Любая помощь будет оценена!

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 

ответ

0

Используйте свойство Shape.Fill

Это возвращает объект 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") 

Ссылка:

+0

Я использовал 'objShape.Fill.Solid', но безрезультатно. В настоящее время результат заключается в том, что новое изображение добавляется без удаления старого –

0

Итак, решение было довольно просто ... и теперь я не должен повторно вставить заголовок и ссылки по-прежнему существует ,

Set rng = objShape.TextFrame.TextRange 
rng.InlineShapes(1).Delete 
Set picture = rng.InlineShapes.AddPicture(fileName:=fullPath, LinkToFile:=False, SaveWithDocument:=True) 
Смежные вопросы