관련 질문:
https://kin.naver.com/qna/detail.naver?d1id=1&dirId=102020103&docId=449143581
질문의 내용은 가로로 된 그림 (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을 방문해서 검사해보셔도 됩니다. 몇 군데에서 바이러스라고 감지하지만 오토핫키프로그램 특성때문에 발생하는 오진입니다. 주요 백신 회사 엔진 검사결과로는 문제가 없다고 나옵니다.
샘플 파일:
Autohotkey 소스:
Autohotkey 실행파일
'AutoHotKey' 카테고리의 다른 글
파워포인트 표 셀 이동 빠른 단축키 (0) | 2024.05.05 |
---|---|
폰트 색깔과 형광펜 색깔을 단축키로 빠르게 변경하기 (2) | 2024.03.23 |
발표자 보기 도구 창에서 '여러 슬라이드 보기' 유지하기 (0) | 2023.11.22 |
파워포인트 원하는 슬라이드로 바로 이동하기 (0) | 2023.07.02 |
표(셀)에 맞게 사진 삽입하기 (0) | 2023.03.16 |
도형 잠금 효과 구현 (0) | 2023.03.04 |
현재 셀에 일정 여백을 두고 정확히 그림 삽입하기 (2) | 2023.02.26 |
PPT 도형 붙이기 (0) | 2023.02.11 |
최근댓글