こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelのVisibleについて

VB6.0でデータベースから取得したデータをExcelに
出力するプログラムを作っています。

ExcelのVisibleをFalseに設定して出力処理を行って
いるのですが、処理中に他のExcelを起動させると
Visible=Falseの設定が解除されて処理中の動作が
見えてしまいます。

Excelのアプリケーションに対してVisible=Falseに
設定しているのが原因ではと思って、ブックに対して
下記のように設定しても駄目でした。
WorkBooks("XXX.xls").Windows(1).Visible = False

出力するテーブルのフィールドが多いため、10分近く処理に時間がかかります。
その間に他のExcelを立ち上げても、処理中のExcelのVisible=Falseの設定が解除されないようにする方法はないでしょうか?

投稿日時 - 2005-01-27 12:48:46

QNo.1188156

暇なときに回答ください

質問者が選んだベストアンサー

VB6ですから、Excelを参照設定したうえで
WithEventつきオブジェクトとして、Excelのイベントを拾ったらどうでしょうか。
例えば、このケースなら「WorkSheetOpen」イベントで
WorkBooks("XXX.xls").Windows(1).Visible = False
# 本当はブックもオブジェクト変数に格納しておき
# .Windows(oBook.Name)のようにすべきですが

としてみましょう。
一瞬表示されてしまいますが、すぐ隠れると思います。
私が実際やったのは、確かWorkSheetOpenイベントで開かれたら(開いたほうのファイルを)すぐ消してしまう方法でした。
Excelを開かれると何をされるか分からないので(笑)、起動時および起動後もExcel(およびブック)のインスタンスを監視して処理中はExcelで別の操作を出来ないようにした記憶があります(完全ではありませんでしたけど)。

投稿日時 - 2005-01-29 22:11:48

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

>その間に他のExcelを立ち上げても、
>処理中のExcelのVisible=Falseの設定が
>解除されないようにする方法はないでしょうか?
開く側が「意識」して別インスタンスになるように
しない限り無理です。
ただブックをダブルクリックして開くなら、
既にあるExcelのインスタンスで開いてしまいます。

たとえば、開きたいブックのショートカットを作って
そのリンク先に
"C:\Program Files\Microsoft Office\Office\EXCEL.EXE"
を書き加えて空白1文字の後に元々のブックのパスを
入れて、これで開いてみるとどうでしょうか。
他のブックが開いている時にこれをやると、
別のExcelウィンドウで開きますから。

投稿日時 - 2005-01-27 13:48:00

ANo.2

> 出力するテーブルのフィールドが多いため、10分近く処理に時間がかかります。

セルに一個ずつ代入しています?
2次元配列から一気に代入する方法があります。(過去ログ)

>その間に他のExcelを立ち上げても、処理中のExcelのVisible=Falseの設定が解除されないようにする方法はないでしょうか?

分かりません。
Excelオートメーションを使わずに、ADOまたはExcelクリエータ(市販ライブラリ)を使うとか。

投稿日時 - 2005-01-27 13:12:21

ANo.1

>処理中のExcelのVisible=Falseの設定が解除されないようにする方法
これはないわけでもないかもしれないけど、フと思ったので、参考がてらに発言です。



>出力するテーブルのフィールドが多いため、10分近く処理

おそらく
-------------------
for i = 1 to レコード数
  ・処理1.読み
  ・処理2.書き
  Doevent
next i
-------------------
としているからでは?


可能であれば、
-------------------
for i = 1 to レコード数
  ・処理1.読み
next i
・処理2.書き
-------------------
というように処理を変えたら早くなると思います。

値を一個づつ設定するより、配列をそのまま出力してあげたら、より高速です。
(配列をそのままセットする[Todo36]氏の履歴があるはずなのですが、見つかりませんでした。)

投稿日時 - 2005-01-27 13:11:54

あなたにオススメの質問