2016-12-27 10 views
1

私はVisioでExcelブックを埋め込み、埋め込みデータに対して読み書き操作を行っています。 Excelデータでペースト・スペシャルを実行すると、選択/コピーされたデータだけでなく、ブック全体が埋め込まれているようです。OLE埋め込みExcelオブジェクトでActiveSheetを取得する方法

Visioページに埋め込まれたExcel Workbookオブジェクトへの参照を取得できましたが、どのシートがアクティブでVisioに表示されているのかわかりません。私は、シートが編集されているときにアクティブなシートが何であるかを知ることしかできないようです。それがページ上にあるとき、WorkbookオブジェクトはActiveSheetに対してNothingを返し、ワークブックにはWindowsがありません。ウィンドウがないのは理にかなっていますが、アクティブなシートがないということはあまり意味がありません。

「アクティブ」シートがExcel OLEオブジェクトに含まれていることを確認する方法はありますか?あるいは、すべてがシート1に入っているという前提の下で、私が書いたコードを書くべきでしょうか?私はおそらく埋め込まれたワークブックをプログラムで追加することになるだろう。だから、各本を1枚に制限するのはそれほど大きなものではないだろうが、私は何かがないことを確かめたい。 。

このコードは、ページ上のExcelのOLEオブジェクトを検索し、ブックのシート1のセルA1とB1を設定します:

Dim CheckShp As Visio.Shape 
Dim CheckObj As OLEObject 
For Each CheckObj In ActivePage.OLEObjects 
    If CheckObj.ProgID Like "Excel.Sheet.*" Then 
     Dim Sheet As Excel.Worksheet 
     Dim Bk As Excel.Workbook 
     Set Bk = CheckObj.Object 
     Set Sheet = Bk.Worksheets(1) 

     Sheet.Cells(1, 1) = "HELLO" 
     Sheet.Cells(1, 2) = "WORLD" 

    End If 
Next CheckObj 
+0

あなたはとにかく 'Activating'または' Editing'埋め込まれたOLEオブジェクトなしのワークブックオブジェクトへの参照を取得することができますか? –

+2

これまでどんなコードがありますか? – BruceWayne

+0

私は簡単にブックへの参照を取得できますが、OLEオブジェクトを編集していないときに表示されるワークシートへの参照を取得したいとします。 OLEオブジェクトが編集されていない限り、ActiveSheetはワークブックオブジェクトのNothingであることがわかります。 –

答えて

-1

あなたはあなたがしている場合、実際には何もありませんActiveSheetを、必要はありません。編集しない。 Bk.Worksheetsを1からWorksheets.Countまで繰り返し、特定の名前を持つものを見つけることができます。

はまた、インデックスは名前にすることができますので、これは動作するはずです:

Set Sheet = Bk.Worksheets("MySpecificSheet") 
+0

質問は「表示されているシートの名前は何ですか?」です。私は特定のシートを入手する方法を知っています。問題は、OLEオブジェクトによってどのシートが表示されているかを調べる方法です。 –

+0

申し訳ありませんが、私はその質問を誤解しました。その答えは「シートが表示されていないので名前がありません。それ以外の場合はActiveSheetです」 –

+0

Excelオブジェクトが画面に表示されていないことを理解しています。シートがレンダリングされた最後の時刻。私は実際に表示するためにレンダリングされたシートの名前を教えてくれるWorkbookオブジェクトまたはOLEオブジェクトのプロパティがあるかどうかを調べたいと思っています。 –

関連する問題