정확한 각도를 그리고 싶을 때 위와 같이 각도표시를 자동으로 그려주는 매크로입니다.

 

첨부파일 다운로드 후에 매크로 허용해서 여세요.

 

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

DrawAngle1.pptm
0.80MB