プロが教えるわが家の防犯対策術!

Vb側からデータをExcelに出力し、その画面を表示させたまま
出力したExcelを確認しようと思ったところ、Excelは起動するものの
シートが表示されない現象が起こりました。
出力後のExcelの終了(解放?)のロジックは下記の通りです。

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets.Add


Sheetへの出力処理


Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing

この現象の回避方法がありましたらご教授ください。

Windows2000
Vb6.0 SP5
Excel2000

A 回答 (5件)

多分、もう解決されているかと思いますが・・・。


簡単に実験してみました。
ステップ実行して、1ステップごとにExcelの状態を確認しました。

Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = New Excel.Application
↑影でこっそりExcelが起動している様子です。。。

xlApp.Visible = True
↑Excelがシート無しの灰色の状態で表示されます。

Set xlBook = xlApp.Workbooks.Add
↑テンプレのとおりのシートが作成されます。
 (デフォルトだとBook1.xlsでシートが3枚)

Set xlSheet = xlBook.Worksheets.Add
↑シートが1枚追加されます(いいのかな・・・)

xlSheet.Range("A1").Value = "Test Data"
↑追加したシートのセルA1に"Test Data"が入力されます。

xlBook.SaveAs "test.xls"
↑デフォルトのパス上にtest.xlsが作成されます。

xlBook.Close
↑Excelがシート無しの灰色の状態に戻ります。

xlApp.Quit
↑Excelが終了します(Alt+Tabで表示されなくなります)

Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing

1.上記を実行後、作成した"test.xls"を開くと、ちゃんと表示されました。。。
2.ためしにNothingを全部コメントにして実行しても、ちゃんと表示されました。
3."xlBook.Close"と"xlApp.Quit"だけをコメントにしたところ、Excel(test.xls)は表示されたままでした。

こんな感じでした。

私の場合、オバケが残る事象が出たら、面倒でもPCを再起動してからソースを修正し、再テストに臨みます。
何度ソースをいじってもオバケが解消されないとき、再起動したら直ったケースがあったので。。。

リンクはAccessに関してですが、Nothingについての考え方(?)が載ってます。

以上、ご参考まで。

参考URL:http://www7.big.or.jp/~pinball/discus/access/911 …
    • good
    • 0

解決しましたか?



Excelはプロセスとして利用するにしても、
隠れたままウィンドウを持つので、
>Set xlApp = Nothing
>Set xlBook = Nothing
>Set xlSheet = Nothing
と書いてもプロセスに残ってしまうでしょう。

ウィンドウを表示させるならNo.1の方の通りですし、
処理してそのまま終わらせるなら、
作成したブックを保存(SaveAs)させて閉じて(Close)から、
Excelを終了(xlApp.Quit)させて下さい。
なお、いきなり終了(xlApp.Quit)させても、
手操作と同じで非保存ブックがあると警告が出て
停止してしまいます。
このような状態だとプロセスに
EXCEL.EXEが残ってしまいます。

この回答への補足

ご指摘の通りブックを保存(SaveAs)させて閉じて(Close)から、Excelを終了(xlApp.Quit)させみましたがやはりワークシートのみ表示されません。xlSheet.Visible=Trueにしてみたりしてるんですがだめです。ほかに方法がありましたらよろしくお願いします。

補足日時:2004/11/12 10:44
    • good
    • 0

saveAsや


QUIT
してます?

Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing
順番的には、逆では?
    • good
    • 0

Set xlApp = Nothing


Set xlBook = Nothing
Set xlSheet = Nothing

以上の部分を以下に変えてはどうでしょうか?
ちがってたらスイマセン・・・。


If Not xlBook Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
Set xlBook = Nothing
End If
If Not xlApp Is Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
Set xlApp = Nothing
End If

GC.Collect()

この回答への補足

どういった処理なんでしょうか?
このままコピーしても処理を行なえません。
どうかご教授ください!

補足日時:2004/11/12 10:51
    • good
    • 0

Set xlApp 後に


xlApp.Visuble=Trueが必要なのでは。

この回答への補足

処理が完全に終了した後に処理の画面を開いたまま、
手動でExcelを表示させたいのです。
出力されたExcel以外の関係の無いExcelを開こうとしてもシートが表示されません。
画面を閉じると正常に表示されます。
VbのほうでExcelを正しく解放していないのではないかと考えているんですが…。
わかりづらく申し訳ございません。

補足日時:2004/11/11 11:44
    • good
    • 0

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