掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数Excelファイルオープンにおける、オブジェクト解放について (ID:146858)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> exlCellsでセルのvalueを参照して値の抽出処理を行っているだけでReleaseComObjectは行っておりません。 それはどのようなコードですか? たとえば、 data = exlCells(行, 列).Value などの記述は NG ですが、その点は大丈夫でしょうか。 >> Quit するなら、ReleaseComObject もセットで行うべきですし、 >> Quit した後で、2回目以降に exlExcelApp を使い続けるべきではありません。 > なるほど。これはちょっと試してみたいと思います。 Quit は、Excel アプリ本体を終了させるためのメソッドですよね。 (Form に対する Close メソッドのようなもの) ループ終了後に閉じている部分に関しては分かりますが、ループ中で (ブックでは無く)Excel 本体を毎回終了させているのは、あまり 意味が無い様に思えました。 終了させる必要が無いのであれば、Quit すべきでは無いと思いますし、 終了させる必要があるのなら、Quit 後には新たに Excel.Application を 起動しなおすべきでしょう。 > 例えば、exlExcelAppをオブジェクト型で定義して、その変数をExcelファイル毎に > ReleaseComObjectの解放とReleaseComObjectのセット(?)でやっていくということでしょうか? ごめんなさい。質問の意味が分かりませんでした。 急に「オブジェクト型」という言葉が出てきたので困惑していますが、 それは As Object で宣言するという意味でしょうか。もしも現状の Dim exlExcelApp As New Excel.Application() というコードを Dim exlExcelApp As Object = New Excel.Application() にするという意味だとしたら、そのような事はすべきではありません。 また、「ReleaseComObjectの解放とReleaseComObjectのセット」という文も 何を意味しているのか分かりませんでした。『(?)』と書かれていますので、 御自身でも内容を伝え切れていないのだとは想像しますが…。 # ReleaseComObjectの解放というのは分かりますが、 # ReleaseComObjectのセットとは一体? で、解放処理についてですが、それぞれをどのタイミングで行うべきかは 事前に考えておいてください。 たとえば、今回のコードは複数のファイルを順に読み出しているようですが、 (案1) Excel をひとつだけ起動し、その中で、ファイルを順次加工していく。 (案2) ファイルを編集するたびに Excel 自体も再起動する。 のいずれかで、解放のタイミングは異なってくるかと思います。 案1で実装する場合は、このような流れになるでしょう。 Excel の起動および解放は、ListBox のループよりも外側で行います。 Excel本体 起動 Workbooks 取得 ≫ループ開始[ファイル名] Workbook 取得 Sheets 取得 ≫ループ開始[Sheet番号] Sheet 取得 Range 取得 (各セルの内容を読み取る) Range 解放 Sheet 解放 ≪ループ終了[Sheet番号] Sheets 解放 Workbook.Close Workbook 解放 ≪ループ終了[ファイル名] Workbooks 解放 Excel本体.Quit Excel本体 解放 案2 の場合は、こんな感じ。 Excel の起動および解放が、ListBox のループの内側で行われます。 ≫ループ開始[ファイル名] Excel本体 起動 Workbooks 取得 Workbook 取得 Sheets 取得 ≫ループ開始[Sheet番号] Sheet 取得 Range 取得 (各セルの内容を読み取る) Range 解放 Sheet 解放 ≪ループ終了[Sheet番号] Sheets 解放 Workbook.Close Workbook 解放 Workbooks 解放 Excel本体.Quit Excel本体 解放 ≪ループ終了[ファイル名] >>> Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False) >>どこかで見たコード…。 > VBレスキュー(花ちゃん)の方で参考にさせて頂きました・・・。 http://hanatyan.sakura.ne.jp/dotnet/Excel08.htm あたりでしょうか。 (あちらにも掲示板はありますよね?) なお、無断転載(≠引用)は禁止されていますのでご注意あれ。 http://hanatyan.sakura.ne.jp/hazimeni.htm
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.