관련 질문:

https://kin.naver.com/qna/detail.naver?d1id=1&dirId=102020103&docId=449143581 

 

PPT 클립보드 그림바꾸기 질문

안녕하세요 https://kin.naver.com/qna/detail.naver?d1id=1&dirId=102020103&docId=414682844&qb=U...

kin.naver.com

 

질문의 내용은  가로로 된 그림 (A) 은 변경이 잘되는데 

세로로 회전된 그림 (B) 을 다른 그림으로 대체하면

원하지 않는 방향으로 그림이 돌어가는 현상에 대한 것입니다.

 

 

파워포인트의 기능인 '그림바꾸기 > 클립보드에서.. '를 이용한 기능인데

회전된 개체에 다른 그림을 붙여넣으면 오작동이 일어나게 됩니다.

 

그래서  CommandBars.ExecuteMso "PictureChangeFromClipboard"  를 이용하지 않고

단순히 Set shp = sld.Shapes.Paste(1) 를 이용해 그냥 붙여넣는 방식으로 수정하였습니다.

 

이 방식은 회전된 개체에도 정상적으로 작동합니다.

단점은 하이퍼링크, 애니메이션 등 기존 그림에 적용된 서식 등이 유지되지 못하는 점입니다.

 

 

기존 코드 A:

더보기
Sub myPasteClipboard()

    Dim w!, h!, l!, t!
    Dim shp As Shape
    
    Set shp = ActiveWindow.Selection.ShapeRange(1)
    '기존 위치 및 크기 기억
    With shp
        w = .Width
        h = .Height
        l = .Left
        t = .Top
        r = .Rotation
    End With
    
    '클립보드에서 그림 바꾸기 실행
    CommandBars.ExecuteMso "PictureChangeFromClipboard"
    
    Set shp = ActiveWindow.Selection.ShapeRange(1)
    '원래 위치 및 크기로 복구
    With shp
        .LockAspectRatio = msoFalse
        .Width = w
        .Height = h
        .Left = l
        .Top = t
        .LockAspectRatio = msoTrue

    End With

End Sub

 

 

수정 코드 B:

Sub myPasteClipboard2()

    Dim w!, h!, l!, t!
    Dim shp As Shape, sld As Slide
    
    Set shp = ActiveWindow.Selection.ShapeRange(1)
    Set sld = shp.Parent
    
    '기존 위치 및 크기 기억
    With shp
        w = .Width
        h = .Height
        l = .Left
        t = .Top
    End With
    
    '클립보드 붙이기
    Set shp = sld.Shapes.Paste(1)
 
    '원래 위치 및 크기로 복구
    With shp
        .LockAspectRatio = msoFalse
        .Width = w
        .Height = h
        .Left = l
        .Top = t
        .LockAspectRatio = msoTrue
    End With

End Sub

 

세로로 회전한 이미지를 복사했을 때는 수정코드 B를 이용하세요.

클립보드 내용을 그냥 붙여넣습니다. 하이퍼링크나 애니메이션 등의 기존 속성은 손실됩니다.

※※※※※※※※※※※※※※※※※※※※※

 

VBA매크로는 매크로 파일을 열어놓아야 작동하므로 간단히 단축키로 실행할 수 있는

오토핫키를 이용하는 것이 편리합니다.

일단 첨부한 Paste2.exe파일(Paste2.ahk코드 참고)을 실행하고 확인을 누르면 상태표시줄로 최소화됩니다.

 

그 다음 파워포인트에서 이미지를 클립보드에 복사한 상태에서

원하는 그림/도형을 선택하고

1.F3을 누르면 파워포인트 기능인 클립보드 이미지로 그림을 교체하는 기능을 이용해서

그림을 바꾸고 크기를 복구합니다. 하이퍼링크나 애니메이션 등 기존 그림의 모든 속성을 유지하는 장점이 있으나 회전된 그림의 경우 회전 오류가 발생합니다.

        shp := ppt.ActiveWindow.Selection.ShapeRange(1)
		w := shp.Width
		h := shp.Height
		l := shp.Left
		t := shp.Top

		ppt.CommandBars.ExecuteMso("PictureChangeFromClipboard")

		shp := ppt.ActiveWindow.Selection.ShapeRange(1)
		shp.LockAspectRatio := 0
		shp.Width := w
		shp.Height := h
		shp.Left := l
		shp.Top := t

 

 

2. F6를 누르면 단순히 그림을 붙여넣기만 합니다. 세로로 회전된 이미지의 경우 적합한 방식입니다.

하이퍼링크, 애니메이션 등 기존 그림의 다른 속성은 손실되지만 회전된 이미지의 경우도 문제가 없습니다.

 

        shp := ppt.ActiveWindow.Selection.ShapeRange(1)
		sld := shp.Parent	;sld := ppt.ActiveWindow.View.Slide
		shpNew := sld.Shapes.Paste(1)
		shpNew.LockAspectRatio := 0
		shpNew.Width := shp.Width
		shpNew.Height := shp.Height
		shpNew.Left := shp.Left
		shpNew.Top := shp.Top
		Sleep 100
		shp.Delete

 

3. Win+X를 누르면 실행을 종료합니다.

 

 

 

혹시 exe파일이 불안하시면 virustotal.com을 방문해서 검사해보셔도 됩니다. 몇 군데에서 바이러스라고 감지하지만 오토핫키프로그램 특성때문에 발생하는 오진입니다. 주요 백신 회사 엔진 검사결과로는 문제가 없다고 나옵니다.

 

 

샘플 파일:

프레젠테이션2.pptm
2.75MB

Autohotkey 소스:

Paste2.ahk
0.00MB

Autohotkey 실행파일

Paste2.exe
0.81MB