2017-11-10 3 views
0

Word 문서에 InlineShape가 있습니다. 이 모양의 VBA 변경 이미지를 통해 프로그래밍 방식으로 필요합니다. 그러나 내가 발견 한 모든 예는 새로운 것에 대한 오래된 형태를 대체했습니다. 모든 서식 (크기, 테두리 등)이 손실됩니다. 이미지의 형식을 잃지 않고 모양 만 바꾸는 방법.VBA를 통해 Word Shape의 이미지 변경

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() 

하지만 이전 사진의 서식을 복사하지 마십시오. 이전 (삭제 된) 사진에서 모든 형식 설정을 복사하는 코드를 만드는 방법은 무엇입니까?

+0

질문이 명확하지 않습니다 ... 모양에 이미지가 있습니까? 텍스트 상자와 같은 모양이 무엇입니까? – SlowLearner

+0

귀하의 관심에 감사 드리며 저의 가난한 영어에 유감입니다. 내 일은 이것이야. 텍스트 블록 사이의 Word 문서에서 한 그림이 배치되었습니다. 위의 코드 (지금 추가)는 서식을 저장하지 않고이 그림을 다른 그림으로 대체합니다. 그리고 이미지 만 바꾸고 오래된 그림의 서식을 저장해야합니다. –

+0

질문 : 새 그림을 문서에 수동으로 붙여 넣을 경우 이전 그림을 삭제하기 전에 형식화 관리자를 사용하여 이전 그림에서 새 그림으로 서식을 적용 할 수 있습니까? 그렇다면 프로그램 적으로도 가능해야합니다. – SlowLearner

답변

1

콘텐츠 컨트롤에서 이미지를 래핑 할 수 있습니다. 크기 세부 정보를 저장하고 삭제 한 다음 새 이미지로 바꾸고 크기 세부 정보를 다시 적용 할 수 있습니다.

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 
+0

고마워! 너는 나를 위해 큰 도움을! –

+0

환영합니다. – SlowLearner