2011-11-23 208 views
1

我插入了一個智能藝術,並將其轉換爲形狀。並通過點擊選擇一個形狀。如何在excel vba中獲得選定的形狀?

現在我想獲得選定形狀的Shape對象。我已經嘗試過,但它會拋出異常。

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」。此操作失敗,因爲IIC'{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

除了這個答案,我已經找到了關於這個微軟的文檔(https://msdn.microsoft.com/en-us/vba/excel-vba/articles/shaperange-object-excel?f=255&MSPPError=- 2147217396)。它說:「使用Selection.ShapeRange(index),其中索引是形狀名稱或索引編號,以在選擇內返回單個形狀。下面的示例爲選定形狀的集合中的形狀2設置填充前景色。窗口一,假設選擇中至少有兩種形狀。「 – trgiangvp3

1

如果沒有選擇任何或多個形狀,則會獲取單個選定的Shape或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