通过VBA更改文字形状中的图像

通过VBA更改文字形状中的图像,vba,ms-word,Vba,Ms Word,我有一个带有InlineShape的word文档。我希望通过VBA以编程方式更改此形状中的图像。但我发现的所有例子都以新的形式取代了旧的形式。所有格式(大小、边框等)都将丢失。如何仅更改形状中的图像而不丢失其中的格式 Dim pic = _m.off.wd.doc.Range(Start:=startRange).InlineShapes(1) Dim picRange = pic.Range Dim cImgPath = getPhotoPathFromRow(cR, cTyp) Dim ne

我有一个带有InlineShape的word文档。我希望通过VBA以编程方式更改此形状中的图像。但我发现的所有例子都以新的形式取代了旧的形式。所有格式(大小、边框等)都将丢失。如何仅更改形状中的图像而不丢失其中的格式

Dim pic = _m.off.wd.doc.Range(Start:=startRange).InlineShapes(1)
Dim picRange = pic.Range
Dim cImgPath = getPhotoPathFromRow(cR, cTyp)
Dim newPic = _m.off.wd.doc.InlineShapes.AddPicture(cImgPath, False, True, picRange)
pic.Delete()

但不能复制旧图片的格式。如何生成代码以从旧(已删除)图片复制所有格式设置?

您可以将图像包装在内容控件中-保存大小详细信息,删除并替换为新图像,然后重新应用大小详细信息

Sub replaceImage()

    Dim originalImage As InlineShape
    Dim newImage As InlineShape

    Set originalImage = ActiveDocument.InlineShapes(1)

    Dim imageControl As ContentControl

    If originalImage.Range.ParentContentControl Is Nothing Then
        Set imageControl = ActiveDocument.ContentControls.Add(wdContentControlPicture, originalImage.Range)
    Else
        Set imageControl = originalImage.Range.ParentContentControl
    End If

    Dim imageW As Long
    Dim imageH As Long
    imageW = originalImage.Width
    imageH = originalImage.Height

    originalImage.Delete

    Dim imagePath As String
    imagePath = "C:\Users\SlowLearner\Pictures\Temp\testImage.jpg"
    ActiveDocument.InlineShapes.AddPicture imagePath, False, True, imageControl.Range

    With imageControl.Range.InlineShapes(1)
        .Height = imageH
        .Width = imageW
    End With

End Sub

您可以将图像包装在内容控件中—保存大小详细信息,删除并替换为新图像,然后重新应用大小详细信息

Sub replaceImage()

    Dim originalImage As InlineShape
    Dim newImage As InlineShape

    Set originalImage = ActiveDocument.InlineShapes(1)

    Dim imageControl As ContentControl

    If originalImage.Range.ParentContentControl Is Nothing Then
        Set imageControl = ActiveDocument.ContentControls.Add(wdContentControlPicture, originalImage.Range)
    Else
        Set imageControl = originalImage.Range.ParentContentControl
    End If

    Dim imageW As Long
    Dim imageH As Long
    imageW = originalImage.Width
    imageH = originalImage.Height

    originalImage.Delete

    Dim imagePath As String
    imagePath = "C:\Users\SlowLearner\Pictures\Temp\testImage.jpg"
    ActiveDocument.InlineShapes.AddPicture imagePath, False, True, imageControl.Range

    With imageControl.Range.InlineShapes(1)
        .Height = imageH
        .Width = imageW
    End With

End Sub

你的问题不是很清楚。。。形状中有图像吗?它是什么形状,像文本框?谢谢你的关注,我很抱歉我的英语不好。我的任务就是这样。在Word文档中,文本块之间放置一张图片。上面的代码(我现在添加)将此图片替换为另一个图片,而不保存格式。我只需要替换图像并保存旧图片的格式。问题:如果手动将新图片粘贴到文档中,在删除旧图片之前,能否使用格式画师将旧图片的格式应用到新图片?如果是这样的话,同样的方法应该可以通过编程实现。我也尝试过使用idea复制格式。但在这种情况下,并非所有格式设置都适用于新图像。例如图片和文本的大小换行。。。在html标记或winform控件中更改图像形状是否容易?您的问题不是很清楚。。。形状中有图像吗?它是什么形状,像文本框?谢谢你的关注,我很抱歉我的英语不好。我的任务就是这样。在Word文档中,文本块之间放置一张图片。上面的代码(我现在添加)将此图片替换为另一个图片,而不保存格式。我只需要替换图像并保存旧图片的格式。问题:如果手动将新图片粘贴到文档中,在删除旧图片之前,能否使用格式画师将旧图片的格式应用到新图片?如果是这样的话,同样的方法应该可以通过编程实现。我也尝试过使用idea复制格式。但在这种情况下,并非所有格式设置都适用于新图像。例如图片和文本的大小换行。。。是否可以像html标记或winform控件那样轻松地更改图像的形状?谢谢!你帮了我大忙!谢谢你帮了我大忙!