@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Excelで印刷が終了するのを待つには?

1
投稿者投稿内容
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-09-10 18:13
お世話になります。只今、vb.netでWinアプリを作成中です。

DataSetの内容をExcel出力して印刷し、その後そのファイルを削除しています。
しかし印刷終了を待たないでExcelファイルを削除しようとしているのでプロセスが使用中だと怒られます。シートの印刷終了を待つようにプロセスを管理したいのですが、方法が解らないので教えていただけないでしょうか?

'Excelの起動
oXL = CType(CreateObject("Excel.Application"), Excel.Application)
oWB = oXL.Workbooks.Open(FileName, , , , , , , , , , , , )

'シートの設定
oSheet = CType(oWB.Worksheets(1), Excel.Worksheet)

--- 処理 ---


'シートの印刷
oSheet.PrintOut()

    ここでプロセスを管理したい。

oWB.Save()
oSheet = Nothing
oWB = Nothing

'アプリケーション終了
oXL.Quit()
oXL = Nothing

'ガベージ コレクションを行う
GC.Collect()

'印刷後ファイルを削除
File.Delete(FileName)

ProcessStartInfoクラスでアプリケーションの起動からやる方法はなんとなく解りそうですが、同じ対象ファイルでシートの印刷を管理するにはどうすればよいのでしょうか?

ご教示の程、宜しくお願いいたします。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-09-14 15:54
自己レスです。

結局、

'アプリケーション終了
oXL.Quit()

の後に

oXL.Wait(5000)

と記述してファイルを削除しました。

過去のログ『VB.NETでShellExecuteExを使用する』を参考に印刷をプロセスでやってみたのですが、

---以下、作成してみたコード---

'プロセス
Dim Proc As New Process

Try
Proc.StartInfo.FileName = "EXCEL.exe"
Proc.StartInfo.Verb = "Open"
Proc.StartInfo.Arguments = strFileName
Proc.StartInfo.CreateNoWindow = True

Proc.Start()
Proc.WaitForInputIdle()
Proc.WaitForExit(5000)

Catch ex As Exception
MsgBox(ex.Message)
Finally
Proc.Kill()
End Try

'印刷後ファイルを削除
If Proc.HasExited = True Then
File.Delete(strFileName)
End If

--------------------------------------

Proc.StartInfo.Verb = "Open" なら問題ないのですが、

Proc.StartInfo.Verb = "Print" にすると
Proc.Start() 以下が上手く作動しませんでした。関連付けられているプロセスはありませんというエラーになります。

また、時間を見つけてチャレンジしてみます。では
1

スキルアップ/キャリアアップ(JOB@IT)