2011-11-23 5 views
1

스마트 아트를 삽입하고 모양으로 변환했습니다. 그리고 그것을 클릭하여 도형을 선택했습니다.엑셀 vba에서 선택한 모양을 얻는 방법?

이제 모양을 선택한 모양의 도형 개체를 가져오고 싶습니다. 이 시도했지만 예외를 throw합니다.

dim shap as Excel.Shape = ExcelApp.Selection 

나는 ActiveSheet.Shapes에 반복 또는이

dim shap as Excel.Shape = ActiveSheet.Shapes.Item(1) 

같은 모양 객체를 얻을 수 그러나 내가 아는 것이 어떻게이 모양은 선택 여부, 정말 감사합니다 도움이 필요합니다.

+0

어떤 오류가 발생합니까? ExcelApp.Selection을 도형에 캐스트하려고 시도 했습니까? –

+0

예 익스프레스 변환도 시도했는데 동일한 예외가 있습니다. 형식 'System .__ ComObject'의 COM 개체를 인터페이스 유형 'Microsoft.Office.Interop.Excel.Shape'로 캐스팅 할 수 없습니다. 다음과 같은 오류로 인해 IID '{00024439-0000-0000-C000-000000000046}'의 인터페이스에 대한 COM 구성 요소의 QueryInterface 호출이 실패했기 때문에이 작업이 실패했습니다. 해당 인터페이스가 지원되지 않습니다 (HRESULT의 예외 : 0x80004002 (E_NOINTERFACE)). . – Waqas

+0

아마도 여기에 제안 된 appraoch 시도 : http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/17ebd235-ccad-4f0e-89e2-030bff2f12d4?prof=required&ppud=4 –

답변

2

도형 개체에 대한 참조를 얻으려면 Selection.ShapeRange을 시도하십시오.

+2

Selection.ShapeRange에 대한 셰이프 참조를 설정하지 않으면 ... 형식 불일치 오류가 발생합니다. Selection.ShapeRange (1)는 범위 객체가 아닌 모양 객체를 반환하므로 오류가 발생하지 않습니다. –

+0

이 답변 외에도 Microsoft 문서 (https://msdn.microsoft.com/en-us/vba/excel-vba/articles/shaperange-object-excel?f=255&MSPPError=- 2147217396). "Selection.ShapeRange (index)를 사용합니다. 여기에서 index는 모양 이름 또는 인덱스 번호로, 선택 영역 내에서 단일 도형을 반환합니다. 다음 예제에서는 선택한 도형의 컬렉션에서 도형 2의 채우기 전경색을 창 하나, 선택에 적어도 두 가지 모양이 있다고 가정합니다. " – trgiangvp3

1

하나 또는 여러 개의 도형을 선택한 경우 하나의 선택된 도형 또는 Nothing을 가져옵니다. 분명히 MsgBox 호출을 삭제할 수 있습니다.

Function GetSelectedShape() As Shape 
    If TypeName(Selection) <> "Rectangle" Then 
     MsgBox "Selection is not a single shape" 
     Exit Function 
    End If 
    Dim oShapes As ShapeRange 
    Set oShapes = Selection.ShapeRange 

    If oShapes.Count <> 1 Then 
     MsgBox "Selection is not a single shape" 
     Exit Function 
    End If 

    Set GetSelectedShape = oShapes(1) 

End Function 
관련 문제