2016-04-28 32 views
0

Excel用のVSTOアドインで、グラフオブジェクト(Excel.Chartのようなもの)にユーザーの選択をキャストする方法を教えてください。Excel VSTO AddIn - 選択からチャートオブジェクトを取得

(Excelで選択したチャートオブジェクトを持ちながら)私はこのようなものを使用しようとしてきた:

Dim chart as Excel.Chart = CType(Globals.ThisAddIn.Application.Selection, Excel.Chart)

しかし、これはInvalidCastExceptionをスローします。

ユーザーがグラフを選択してから、選択したグラフをVSTOアドインで変更できるようにする方法については、ドキュメントを見つけることができないようです。

+0

このサンプルを試すhttps://code.msdn.microsoft.com/ office/VSTO-Generate-tables-and-f19859b3 – dinotom

+0

@dinotomありがとうございましたが、この例ではグラフを追加する方法しか示されていません(VSTOグラフ作成に関する唯一のドキュメントと思われる)。私の場合、ユーザーが選択した既存のグラフを変更したいと考えています。 –

答えて

1

コードでは、選択に実際にChartオブジェクトが含まれているかどうかを確認してからChartを取得する必要があります。 VB.NETを使用する場合、String型を返すTypeNameメソッドを使用して、文字列を評価します。

Public Function IsSelectionChart() as Boolean 
    Dim cht As Excel.Chart 
    Dim sSelectionType As String 
    Dim xlApp As Excel.Application = Globals.ThisAddIn.Application 

    sSelectionType = TypeName(xlApp.Selection) 
    Select Case sSelectionType 
     Case "ChartArea", "PlotArea", "Legend" 
      cht = xlApp.Selection.Parent 
      Debug.Print(cht.Name) 
     Case "Series" 
      cht = xlApp.Selection.Parent.Parent 
      Debug.Print(cht.Name) 
     Case "Axis" 'Parent is Worksheet 
      Debug.Print("Can't determine the chart from an Axis") 
     Case Else 
      Debug.Print("Not a chart-related object") 
    End Select 

    If Not cht Is Nothing Then 
     Return True 
    Else 
     Return False 
    End If 
End Function 
+0

ありがとう!これは非常に便利です。もう1つの問題は、コードでブレークポイントを使用しているときに、「選択」の動作がちょっと変わっていることです。私はテストするためにブレークポイントを設定しようとしていましたが、それはあらゆる種類の奇妙な問題を引き起こしていました。ブレークポイントを削除してコードを実行させるだけで、うまくいきました。再度、感謝します。 –

+0

@JohnH VBAとは対照的に、Visual Studioのコードを "ウォーキング"して、何が起こっていないのがうまくいかないかを見てみましょう。私が問題を抱えている場合、各ステップを見る必要がある場合は、VBAですべてのしわを取り除き、VB.NETまたはC#にコードを転送します。インプロセスとアウトプロセスの実行の違い –

関連する問題