정확한 각도를 그리고 싶을 때 위와 같이 각도표시를 자동으로 그려주는 매크로입니다.
첨부파일 다운로드 후에 매크로 허용해서 여세요.
Alt-F8누르거나 개발도구 - 매크로로 DrawAngle 매크로를 실행하세요.
그러면 각도를 물어볼텐데 거기에 원하는 각도를 입력하세요.
그러면 자동으로 계산해서 그려줍니다.
각도를 나타내는 호는 원호를 그리고 조절값을 각도에 맞게 조절합니다.
직선도 Cos, Sin 을 이용해 계산해서 그려줍니다.
아래 실행 영상 참고하세요.
더보기
Option Explicit
Sub DrawAngle()
Dim sld As Slide, shp As Shape
Dim usr As String
Dim ang As Single, Asize!, Lsize!, SW!, SH!, x!, y!
Dim LineColor As Long, LineWeight As Long
Asize = 50 '내부 각도 표시 크기
Lsize = Asize * 3 '선 길이
LineColor = RGB(0, 127, 255) '선 색깔
LineWeight = 2 '선 두께
usr = InputBox("각도를 입력하세요.", "각도 그리기", Default:=60)
If Not IsNumeric(usr) Then Exit Sub
ang = CSng(usr)
If ang < 0 And ang > 360 Then Exit Sub
With ActivePresentation.PageSetup
SW = .SlideWidth: SH = .SlideHeight
End With
Set sld = ActiveWindow.Selection.SlideRange(1)
'내부 각도 표시(원호)
Set shp = sld.Shapes.AddShape(142, SW / 2 - Asize / 2, SH / 2 - Asize / 2, Asize, Asize)
shp.Name = "Angle"
shp.Fill.Visible = msoFalse
shp.Line.Weight = LineWeight
shp.Line.ForeColor.RGB = LineColor
shp.Adjustments(1) = 180
shp.Adjustments(2) = -1 * (180 - ang)
shp.Select msoTrue
'각도 숫자
x = Cos(ang / 2 * (3.141592 / 180)) * Asize / 2 ' rad = angle * PI/180
y = Sin(ang / 2 * (3.141592 / 180)) * Asize / 2
Set shp = sld.Shapes.AddTextbox(msoTextOrientationHorizontal, SW / 2 - 55 - x, SH / 2 - y - 20, 55, 20)
shp.Name = "AngleValue"
shp.TextFrame.WordWrap = msoFalse
shp.TextFrame.MarginRight = 0
With shp.TextFrame.TextRange
.Text = ang & "º"
.Font.Name = "Arial"
.ParagraphFormat.Alignment = ppAlignRight
End With
shp.Select msoFalse
'선1
Set shp = sld.Shapes.AddLine(SW / 2, SH / 2, SW / 2 - Lsize, SH / 2)
shp.Name = "AngleLine1"
shp.Line.Weight = LineWeight
shp.Line.ForeColor.RGB = LineColor
shp.Select msoFalse
'선2
x = Cos(ang * (3.141592 / 180)) * Lsize ' rad = angle * PI/180
y = Sin(ang * (3.141592 / 180)) * Lsize
Set shp = sld.Shapes.AddLine(SW / 2, SH / 2, SW / 2 - x, SH / 2 - y)
shp.Name = "AngleLine2"
shp.Line.Weight = LineWeight
shp.Line.ForeColor.RGB = LineColor
shp.Select msoFalse
'그룹 처리
'sld.Shapes.Range(Array("AngleLine1", "AngleLine2")).Group.Name = "AngleLine"
'sld.Shapes.Range(Array("Angle", "AngleValue", "AngleLine")).Group.Name = "Angle" & ang
ActiveWindow.Selection.ShapeRange.Group.Name = "Angle" & ang
End Sub
'PPT+VBA' 카테고리의 다른 글
파워포인트파일 사용자 속성 관리 (0) | 2021.10.31 |
---|---|
RGB값의 변화에 따른 LED 색상 변화 시뮬레이션 PPT (0) | 2021.10.15 |
모든 폰트목록 보기 및 클라우드 폰트 일괄 다운로드 (0) | 2021.10.09 |
개체 잠금 효과 구현 (0) | 2021.10.07 |
표안의 셀들을 도형으로 변환, 각각 애니메이션 적용하기 (5) | 2021.09.20 |
PPT 슬라이드내의 글자 사용빈도 통계 (0) | 2021.09.12 |
그림효과 복사 일괄적용 (0) | 2021.09.12 |
파워포인트 파일을 저장 후 다시 열 때 읽기전용 (Read Only) 로 바뀌는 경우 (0) | 2021.09.08 |
최근댓글