3

わかりました。MS Access から (テンプレートに基づいて) Word 文書を作成し、OLEFormat オブジェクトを使用していくつかのグラフを更新しています。Excel の新しいインスタンスを作成するオブジェクトをアクティブ化し、編集を行ったら、その Excel のインスタンスを次のコマンドで閉じます。

wdChart.ChartData.Workbook.Application.Quit

Excel の他のインスタンスが実行されていない場合、これは正常に機能します。ただし、OLEFormat.Activate が発生したときに Excel の開いているインスタンスがある場合、Excel の新しいインスタンスは作成されませんが、開いている Excel の同じインスタンスでグラフ スプレッドシートが開きます。そのため、.Application.Quit コマンドを実行すると、そのインスタンスで開いているすべてのブックが閉じられ、ブックを保存するように求められます。この時点で、次のような Word メッセージが表示されます。

グラフを挿入するには、まず開いているダイアログ ボックスをすべて閉じるか、Microsoft Excel の編集モードをキャンセルする必要があります

私のコードは次のように失敗します:

オブジェクト 'ChartData' のメソッド 'Activate' が失敗しました

これらのエラーは、私のコードが複数のチャートを順番に編集しているという事実に関係していると思います。Word ダイアログがポップアップしても、私のコードはまだ実行中か何かを試みています。

OLEFormat.Activate に Excel の独自のインスタンスを開くように強制する方法があれば、これをすべて解決できると思います。これは可能ですか?

4

2 に答える 2

1

複数のワークブックが開いているかどうかを確認する必要があります。その場合は、グラフ ワークブックを閉じます。そうでない場合は、アプリケーションを終了します。

If wdChart.ChartData.Workbook.Application.Workbooks.Count > 1 Then
    wdChart.ChartData.Workbook.Close saveChanges:=False
Else
    wdChart.ChartData.Workbook.Application.Quit
End If 
于 2013-05-06T17:22:30.117 に答える
1

これと「AddChart」で同様の問題がありました.Office 2010(2013または2016ではありません)で何らかの理由で、連続して複数のチャートにアクセスすると、別のチャートが開く前にExcelウィンドウが閉じないことがあります。これにより、@MultiGuy で発生したエラーが発生します。

私の場合、「Activate」および「AddChart」呼び出しの前に少し待機時間を追加したところ、問題が解決したようです。

Excel.Application.Wait Now + TimeValue("0:00:01")

長期的には、関連する Excel ウィンドウが閉じるまで待機する何らかの関数を作成する必要がありますが、今のところ、このはるかに脆弱なアプローチがほとんどのシナリオで機能すると思います。

于 2016-08-02T16:33:49.073 に答える