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

VB.netからExcel経由での印刷ができない

1
投稿者投稿内容
tkcjun
会議室デビュー日: 2005/03/22
投稿数: 2
投稿日時: 2005-03-22 13:57
VisualBasic.NET 2003からExcel 97経由でプリンタに出力しようとしたところ、PrintOut関数が終了せず(デバッグモードだとPrintOut関数の次に制御が来ない)固まってしまいます。何か設定などが必要なのか、どなたかお知恵を拝借できるとありがたいです。
タスクマネージャで見ると、VB のアプリは実行中のまま(プロセスのCPUは0%)、ExcelのプロセスのCPUは一瞬5%程度になりますが、その後0%です。
OSは、Windows XP Professional SP2です。
ちなみに、XP Home + Excel 2000の組合せでも同じでした。

ちょっと長くなりますが、以下にコードを示します。
ちなみにExcel 8.0 Object Libraryを参照の追加で設定してありますが、この他にも必要なコンポーネントがあるのでしょうか?
以上宜しくお願いします。

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim objExcel As Excel.Application
Dim objBooks As Excel.Workbooks
Dim objBook As Excel.Workbook
Dim objSheets As Excel.Sheets
Dim objSheet As Excel.Worksheet
Dim objCell As Excel.Range

Try
objExcel = CreateObject("Excel.Application")
objBooks = Nothing
objBook = Nothing
objSheets = Nothing
objSheet = Nothing
objCells = Nothing
objCell = Nothing

objBooks = objExcel.Workbooks
'フルパスで指定しないとOpenできなかった
objBook = objBooks.Open("c:\test.xls")
objSheets = objBook.Sheets
objSheet = objSheets(1)
objCell = objSheet.Cells

objCell(1, 1) = 12345

'Excelファイルに保存
objBook.SaveAs("c:\aaa.xls", Excel.XlFileFormat.xlExcel9795)
'印刷プレビュー後印刷の予定だが、うまく行かない
objSheet.PrintOut(From:=1, Preview:=True)

Catch ex As Exception
MessageBox.Show(ex.Message, "Excel エラー")
End Try

'以下を実行しないとexcelのプロセスが残ってしまうようだ
System.Runtime.InteropServices.Marshal.ReleaseComObject(objCell)
objCell = Nothing

System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheet)
objSheet = Nothing

System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheets)
objSheet = Nothing

objBook.Close(False)
System.Runtime.InteropServices.Marshal.ReleaseComObject(objBook)
objBook = Nothing

System.Runtime.InteropServices.Marshal.ReleaseComObject(objBooks)
objBooks = Nothing

objExcel.Quit()
End Sub
べーちゃん
大ベテラン
会議室デビュー日: 2002/07/21
投稿数: 121
投稿日時: 2005-03-23 02:10
流し読みで間違っていると申し訳ないのですが、
多分エクセルのアプリケーションのVisibleプロパティがFalseなんでは
ないでしょうか。
もしそうであればプレビュー前にVisibleをTrue、プレビュー後に必要なら
Falseにしてやれば動くと思います。



[ メッセージ編集済み 編集者: べーちゃん 編集日時 2005-03-23 02:13 ]
tkcjun
会議室デビュー日: 2005/03/22
投稿数: 2
投稿日時: 2005-03-23 09:28
べーちゃんさん、コメントありがとうございます。
objExcel.Visible = True
を追加しただけで、動作するようになりました。
ありがとうございました。
1

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