1

Word文書に埋め込まれたExcel文書を読んでみました。私はこのブログ記事で指定されたコードに従いました:

http://vbadud.blogspot.com/2010/08/how-to-read-excel-sheet-embedded-in.html

Dim oWB As Excel.Workbook
Dim oIShape As InlineShape

For Each oIShape In ActiveDocument.InlineShapes
    If InStr(1, oIShape.OLEFormat.ProgID, "Excel") Then
        oIShape.OLEFormat.Activate
        Set oWB = oIShape.OLEFormat.Object
        oWB.Sheets(1).Range("A1").Value = "ProdID"
    End If
Next oIShape

正常に動作しますが、Activate行を使用すると、読み取った各Excelドキュメントでドキュメントがちらつきます。oIShape.OLEFormat.Activateコードを削除しようとしましたが、次の行で「ランタイムエラー '430」がスローされます(クラスは自動化をサポートしていないか、expectをサポートしていません)。

問題は、Activateメソッドを呼び出さずに埋め込みExcelにアクセスする他の方法はありますか?

4

1 に答える 1

4

これはトリッキーです!簡単な答えは、いいえです。埋め込まれたExcelではありません。

私はいくつかの実験といくつかの研究をしました。動作を具体的に説明するソースが見つからなかったため。これは私の側の推測です。ExcelスプレッドシートをWord文書に埋め込むと、基本的にWordはスプレッドシートのリンクを保存します。これは、Excelプログラムで解釈する必要があるため、外観のみを表示します。図形を実際にアクティブにするまで、Wordで直接操作することはできないため、図形を操作することはできません。この記事はその振る舞いをほのめかしていますが、それについては説明していません。引用は次のとおりです。

If you edit the object in Word, click anywhere outside the object to return 
to the destination file.
If you edit the object in the source program in a separate window, 
click Exit on the File menu of the source program to return to the
destination file.

使っても気づいたかもしれません。Application.ScreenUpdating = falseそれでもあなたが言及したちらつきはします。これは、図形にアクセスするときに別のアプリケーションを使用しているためです。シェイプをアクティブにするたびに、オブジェクト固有のメニューなどが読み込まれます。

考えられる回避策:挿入メニューからExcelスプレッドシートを埋め込む代わりに、コントロールを追加できます。Office 2003を使用している私のマシンでは、同等のものは次のとおりです。Microsoft Office Spreadsheet 11.0これは技術的にはWebコントロールですが、方法と動作はExcelブックに非常に匹敵します。

便利な挿入オブジェクトの代わりにコントロールを使用して、コードを少し変更して、activateコマンドをコメント化することができ、コードは期待どおりに実行されました。具体的には、次の行を変更する必要がありました。

  • Dim oWB As Spreadsheetそれ以外のExcel.Workbook.
  • If InStr(1, oIShape.OLEFormat.ProgID, "OWC11.Spreadsheet.11") Thenそれ以外の"Excel"

基本的には、次のことを決定できます...解釈にExcelが必要な埋め込みオブジェクトをアクティブ化するか、アクティブ化を必要としない別のコントロールを使用します。

于 2012-07-14T06:20:38.993 に答える