Powerpoint에서 작업 중인 슬라이드에서 개체를 선택한 후, 어떠한 매크로를 실행하고자 합니다. 이때 사용자가 선택한 개체를 변수에 할당한 후 일괄 작업을 하도록 매크로를 작성할 수 있습니다.
사용자가 슬라이드에서 어떤 개체나 글자 등을 선택하게 되면, 선택된 항목은 ActiveWindow.Selection에 할당되어 있습니다. 선택된 개체가 어떠한 형태인지, 몇개인지 등에 대한 정보가 모두 포함되어있습니다. 만약, 선택된 개체가 도형이나 그림이라면 ShapeRange 안에 포함되어 있습니다. 다만, Shape 개체는 그룹화되어 있기도 하고, 각각의 개체일 수도 있고, 이들의 조합인 경우도 있습니다.
어떤 도형이나 그림을 여러 개 선택한 후, 배열을 다시 하고 싶다고 하면, 사용자가 현재 어떤 개체를 선택했는지 알아야합니다. 선택한 상황에 따라 아래와 같이 선택 개체를 사용자가 임의로 접근할 수 있는 ShapeRange에 지정해주면 작업이나 코드가 간결해질 수 있습니다.
1. 여러 개의 개체를 선택했다면, 각각의 개체를 ShapeRange로 지정합니다. 아래와 같이 선택하면, ShapeRange의 Item(1), Item(2), Item(3)에 각각 원, 사각형, 삼각형이 지정됩니다.
3. 그룹화된 개체 안에 여러 개의 개체가 있고, Child 개체 대신 그룹화된 개체 1개를 선택했을 때 그룹 내 Child 개체 전체를 선택하고 싶으면, 사용자가 각각의 개체를 수고스럽게 Shift나 Ctrl 버튼과 조합해 클릭해서 선택하지 않더라도 자동으로 모든 개체가 선택한 것으로 바꿔서 ShapeRange에 지정해주면 조금은 편리할 수 있습니다.
또한, 어떨 때에는 Child 개체로 나눠줄 게 아니라, 그룹화된 개체 1개를 선택한 그대로 반환할 필요도 있겠지요. 아래와 같이 그룹화된 1개 도형을 선택하면, 각각의 Child 개체를 ShapeRange에 할당할지, 그룹 전체를 1개 Shape으로 할당할지는 선택할 수 있도록 합니다.
이상의 조건을 만족할 수 있도록, 사용자가 도형이나 그림 개체를 여러개 선택했을 때, 선택된 개체를 ShapeRange로 지정해서 반환해주는 매크로입니다.
Function SelectedShapeRange(Optional iSelChildShape As Boolean = True) As ShapeRange
On Error GoTo ErrorHandler
Dim tSel As ShapeRange, i As Long, tSN() As Long
If ActiveWindow.Selection.HasChildShapeRange Then
Set tSel = ActiveWindow.Selection.ChildShapeRange
Else
Set tSel = ActiveWindow.Selection.ShapeRange
If iSelChildShape And tSel.Count = 1 And tSel(1).Type = msoGroup Then
ReDim tSN(1 To tSel(1).GroupItems.Count)
For i = 1 To tSel(1).GroupItems.Count: tSN(i) = i: Next
Set tSel = tSel(1).GroupItems.Range(tSN)
tSel.Select msoTrue
End If
End If
ErrorHandler:
Erase tSN
End Function
댓글 없음:
댓글 쓰기
의견이나 질문이 있으신 분은 언제든지 댓글을 달아주세요~