アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

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

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

A 回答 (4件)

VB6ですから、Excelを参照設定したうえで


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

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

>その間に他のExcelを立ち上げても、


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

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

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



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

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

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

>処理中のExcelのVisible=Falseの設定が解除されないようにする方法


これはないわけでもないかもしれないけど、フと思ったので、参考がてらに発言です。



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

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


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

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!