- - PR -
Excel起動時、ブックがCloseしてしまう
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-31 11:33
マクロつきのExcelブックをOpenさせたいのですが、起動後ブックが閉じてしまうことがあり、困っています。
処理は ------------------------------------------- Protected xlApp As Excel.Application Protected xlBook As Excel.Workbook Protected xlSheet As Excel.Worksheet Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try xlApp = CType(CreateObject("Excel.Application"), Excel.Application) xlApp.DisplayAlerts = True xlApp.Visible = True xlBook = xlApp.Workbooks.Open("C:\Test.xls") xlApp.Run("Auto_Open") xlSheet = xlBook.Worksheets(1) xlSheet.Application.Visible = True Catch ex As Exception '例外をキャッチしたら開いたBookを閉じてExcelを終了させる xlBook.Close() xlApp.Quit() Finally ' COM オブジェクトを解放して、参照を解放 If Not (xlApp Is Nothing) Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) xlApp = Nothing End If If Not (xlBook Is Nothing) Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook) xlBook = Nothing End If If Not (xlSheet Is Nothing) Then System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) xlSheet = Nothing End If End Try End Sub ------------------------------------------- という感じで、Excelを起動してブックを開き、マクロAuto_OpenをRunさせているだけなのですが、うまくいくときといかないときがあります。 うまくいくときは起動してブックも開いてマクロが動いてくれているのですが、何回かに1回の割合でマクロ起動後のブックがそのまま閉じてしまい、何もブックを開いていないExcelアプリケーションだけが画面に残ります。 (Catchの中でCloseしてはいますが、問題の現象のときはそこに飛んでいるわけではないようです) こんな現象に出会った方、いらっしゃいますか? それとも、そもそもこの呼び方が悪いのでしょうか?(うまくいっているほうがたまたま?) | ||||||||||||
|
投稿日時: 2005-10-31 11:59
私も試してみましたが、何度やっても正しく処理されました。
私の環境 : Windows XP Professional SP2 Microsoft Office Professional Edition 2003 Microsoft Excel 11.0 Object Library (1.5)
2 回目以降、うまくいかないのであればプロセスが残っていませんか? タスク マネージャのプロセス タブで「EXCEL.EXE」が残っていないか確かめてみてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-10-31 12:53
具体的にはどの行で妙な動きをしていますか? ステップ実行して確認してください。
ぱっと見で、いくつかのオブジェクトがリークしています。 それが原因で Excel のプロセスが居残ってたりはしませんか? | ||||||||||||
|
投稿日時: 2005-10-31 13:09
じゃんぬねっとさん、渋木宏明(ひどり)さん、こんにちは。
お返事どうもありがとうございます。
何度か実験してみたのですが、どうもEXEを起動して1度目だけがうまくいかないようです。 Excelは表示させっぱなしにしておくので、先の私のコードでボタンをクリックするたび Excelが起動してブックを操作→手動でExcelを閉じる を繰り返してみたところ、1度目だけブックが閉じてしまいました。 また、ステップ実行してみたところ、 Catch直前の xlSheet.Application.Visible = True でブックが消えます。 ブックを単体で(直接Excelで)開いてマクロを有効にしても、このような現象にはならないので、マクロのせいではないように思えるのですが… マクロを疑ったほうが良いでしょうか? | ||||||||||||
|
投稿日時: 2005-10-31 13:16
いえ、マクロはたぶん関係ありません。 まずは、コードを疑ってみましょう。 また、以下の私の質問の返答がなされていません。 重要な質問ですので、どうか検証してください。
実行した後、タスクマネージャのプロセスタブを確認してください。 Sheet オブジェクトって必要ですか? また、xlSheet.Application.Visible = True はおかしくないでしょうか? その前に xlApp.Visible = True となっていますが... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-10-31 14:08
すみません、プロセスは残っています。(Quitしていないので)
そうですね。xlSheet.Application.Visible = Trueは不要でした。 実際にはExcel起動後、最初は画面に表示させないようにしてシートにDBから集計したデータを書き込み、最後にマクロを走らせてから表示させるというものなのですが、ソースを弄繰り回しているうちに中途半端にSheetの扱いを消しそこなってしまったものです。 失礼いたしました。 | ||||||||||||
|
投稿日時: 2005-10-31 14:16
1 度目は正常に動作すれば xlApp.Quit されるのではないですか? 1 度目は正常に動くんですよね? とりあえず、私が提示したソースコードでやってみて頂けないでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2005-10-31 14:29
すみません、動かないのが1度目だけなのです。 2度目以降は動きます。プログラムからはExcelを終了させないので(つまりボタンを押したらExcel起動+マクロ起動してそのままシートを開きっぱなし)、ボタンを押してExcel起動→手動でExcel閉じる を繰り返したものです。 じゃんぬねっとさんのコードですと、マクロが実行されてブックのClose、ExcelのQuitとも正常に行われることを確認しました。 が、閉じてしまっては困るので、マクロを有効にした状態で開きっぱなしにしておきたいのですが… |