[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/05/24(Thu) 10:16
投稿者名:はるの
Eメール:
URL :
タイトル:
VB6.0からExcel2007を操作する
今回VB6.0で作ったアプリをWindowsVista対応させるということで
修正を行っています。
Excelは2007が入っています。

もともとWinXP(または2000)+VB6(SP6)+Excel2000 で作られたアプリです。

事前バインディングでも実行時バインディングでも処理自体は動くのですが、
BookのSaveAsメソッドまたはSaveメソッドでものすごく時間がかかります。
(WinXP+VB6(SP6)+Excel2000環境では1秒もかからないが、
 WinVista+VB6(SP6)+Excel2007では5秒以上は確実にかかる)

そのため、Excel操作中にVB画面をクリックしてしまうと
「他のアプリケーションがサーバーを使用しているため、この操作を
完了できません。操作を続けるには、[切り替え]ボタンを選択して
他のアプリケーションを終了させてください」
とのメッセージが出てしまいます。

このメッセージ自体は「OleRequestPendingTimeout」でタイムアウト時間を
増やせばでないようにできるようなのですが、
保存にものすごく時間がかかることが納得いきません。

回避方法はないでしょうか?

投稿時間:2007/05/24(Thu) 10:45
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: VB6.0からExcel2007を操作する
デフォルトの保存形式が変更されていることが原因かも知れません。

Save ではなく SaveAs を使って、保存形式を明示的に指定してみるとどうでしょうか?

投稿時間:2007/05/25(Fri) 13:56
投稿者名:はるの
Eメール:
URL :
タイトル:
Re^2: VB6.0からExcel2007を操作する
解決いたしました。
魔界の仮面弁士さんにご教示いただいたようにSaveAsにて
FileFormat形式を指定してみたのですが、それでも時間がかかったため
再度調べなおしました。

結果わかったことをまとめると以下のようになります。
1.今回のSaveAsにて保存を行う前に、別PGよりExcel出力処理をおこなっていた。
2.そのExcel出力処理にて互換性チェックがかかっていた。
 (Excel2007ではExcel2000形式で外部リンクを含んで保存したExcelファイルを
  上書き保存しようとすると互換性チェックメッセージボックスが開く)
3.しかしExcel出力処理をExcel非表示にておこなっていたため、
 互換性チェックメッセージボックスが表示されず、VBがフリーズしてしまったように見えた。
4.タスクマネージャーを起動し、VBプログラムのみを強制終了
5.互換性チェックのプロセスが残ったまま、今回質問提起したPGを起動しExcel出力を
 行おうとしたため、SaveAsに異常に時間がかかった。

結局、互換性チェックのプロセスを終了してからもう一度実行したら、
すんなりとSaveAsのコードを通りました。
VistaにてExcel2007を非表示操作すると、Excelのメッセージボックスも非表示に
なってしまうので、注意が必要なようです。

お騒がせしました。m(_ _)m