タイトル : Re: Excelのプロセス 投稿日 : 2007/03/05(Mon) 11:01 投稿者 : 魔界の仮面弁士
# なぜ、Excel 解放問題に関する質問が無くならないのだろう…? > strName = objExcel.Application.GetOpenFilename("Excelファイル (*.xls), *.xls") Application プロパティの使用は冗長です。 objExcel.Application は、objExcel 自身を返しますので。 > objBook = objExcel.Workbooks.Open(strName) Workbooks を変数にうけとり、最後に ReleaseComObject メソッドで解放しましょう。 VB6 や VBA とは、ActiveX の解放手順が全く異なることに注意して下さい。 > objBook.Worksheets("Sheet1").Cells(1, 1) = "Test" Worksheets を変数に受けましょう。 Worksheet も変数に受けましょう。 Range も変数に受けましょう。 そして、Range の Value プロパティに "Test" を代入し、それから最後に、 変数に受けた ActiveX オブジェクトを、ひとつひとつ解放していきましょう。 > objBook.Close() > objBook = Nothing > objExcel.Quit() > objExcel = Nothing これらの Nothing を代入する行為自体には、ほとんど意味がありません。 (これが VB6 であれば、少しは意味があるのですが) Excel オブジェクトの解放の必要なのは、Marshal クラスの ReleaseComObject メソッドを呼び出すことです。 > MsgBox("出力終了", MsgBoxStyle.Information, "報告") 最初は vbInformation 定数を使っていて、ここでは MsgBoxStyle.Information になっていますね。 どちらの定数を使っても(あるいは MessageBox.Show に切り替えても)結果は同じではありますが、 意識的に、コードに統一性を持たせる癖を付けておいた方が良いかと思いますよ。 |