2010-12-14 14 views
0

Excelで何かが選択されると、Excel :: Application :: Selectionプロパティに選択したオブジェクトが含まれます。例えば、私はいくつかのセルを選択した場合、私は簡単に使用してExcel ::範囲にそれらをキャストすることができます:Excel Interop - Excelの種類の取得::アプリケーション::選択

いくつかの画像を選択したときにエクセル= Microsoft.Office.Interop.Excelが

さて、私はキャストする必要があり

Excel.Range cells = Excel.Application.Selection as Excel.Range 

Excel :: Picture、Excel :: Shapeにいくつかの形がありますが、Oval、Rectangleなどの各シェイプに異なるインタフェースがあるようです。ワークシートで選択されているものを削除する必要があります。そのセル場合は、内容が、画像をクリアされ、形状やOLEObject変数が削除されますが、問題は、私はそれぞれ、すべてのインターフェイスをチェックしたくないということです:ちょうどがある場合は、私が望む

if (null != ThisApplication.Selection as Excel.Shape) 
    (ThisApplication.Selection as Excel.Shape).Delete(); 
else if (null != ThisApplication.Selection as Excel.Picture) 
    (ThisApplication.Selection as Excel.Picture).Delete(); 
else if (null != ThisApplication.Selection as Excel.OLEObject) 
    (ThisApplication.Selection as Excel.OLEObject).Delete(); 

私はすべての図形/画像をキャストし、それらの呼び出しを削除することができます1つの基本的なインターフェイス。 ::それは、システムを表示COMObjectが、実際のタイプ

  • に何の情報がどういうわけか/選択は、画像が含まれていることを確認しない -

    1. アプリケーション内の実タイプ::選択:

      を取得することが可能ですシェイプなどを作成し、基になるタイプの「削除」メソッドを呼び出す

  • 答えて

    1

    これは私の問題を解決する方法です。答えは、VBAで遅延バインディングを使用することです。 Application.Run(...)メソッドを使用して、C#アドイン内からVBAマクロを呼び出します。 VBAマクロは、次のコードを実行するだけです。

    VBAは、それがどんな形状であってもDeleteメソッドを呼び出します。

    関連する問題