Excel 2010 において連続したマクロ処理の実行後の Workbooks.Open メソッドが失敗する場合がある

適用対象: Excel 2010

現象


Excel 2010 において、以下の条件を満たした状態で Workbooks.Open メソッドを実行すると、エラー番号 1004 の「アプリケーション定義またはオブジェクト定義のエラーです。」といったエラーが発生することがあります。

  • Workbooks.Open メソッドで開こうとしているファイルが .xls 形式
  • Workbooks.Open メソッド実行前に、セルのコピー等、クリップボードに関する処理を含むループ処理を連続で行う
  • Workbooks.Open メソッド実行前に DoEvents 関数の呼び出しが存在しない
  • クリップボードを監視し、データが変わった時にそのデータを取得する外部プログラムが存在する

原因


Excel 2010 ではクリップボードへのデータ格納の際、遅延レンダリングを行っています。
そのため、外部プログラムからクリップボード データへの参照が行われた場合に、クリップボードへデータを設定することを要求するウィンドウ メッセージを受け取ります。

しかし、Workbooks.Open メソッド実行前にループでクリップボードに関する処理を行うものの、そのウィンドウ メッセージを処理していない場合、Workbooks.Open メソッドの処理中に予期しないタイミングでクリップボードの処理が割り込むことがあります。

この割り込みタイミングによっては、Excel 2010 で想定しない状態となり、Workbooks.Open メソッドが失敗します。

回避策


Workbooks.Open メソッドの実行前に DoEvents 関数を実行するか、もしくは Workbooks.Open メソッドの実行を再試行します。

状況


マイクロソフトでは、この問題について現在調査中です。詳細については、わかりしだいこの資料に掲載する予定です。