tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルExcelのプロセスについて
記事No2764
投稿日: 2005/12/15(Thu) 18:32
投稿者徳蔵丸
[OSのVer]:Windows2000  [VBのVer]:VB.NET2003

いつもお世話になっております。

Excelのプロセスが残ってしまう現象が消えなくて困っております。
ロジック全体を分割して実行していったところ、
プロセスが残ってしまう現象がどこで起きているかが判明しました。

下記ロジックの「問題A」の個所を
入れる場合、EXCELプロセスが残ってしまい、
コメントアウトすると、EXCELプロセスが消えます。
ここまではわかったのですが、情けないのですがその対処方法がわからなくて困っております。
ブックのシート数は取得したいので「問題A」ロジックは必要なのです。

どなたか、お知恵をお貸しください。

        Dim xlApp As New Excel.Application
        Dim xlBooks As Excel.Workbooks
        Dim xlBook As Excel.Workbook
        Dim xlSheets As Excel.Sheets
        Dim xlSheet As Excel.Worksheet

        'エクセルファイルを作成する。
        xlBooks = xlApp.Workbooks
        xlBook = xlBooks.Add
        xlSheets = xlBook.Worksheets

        Dim intSheetCnt As Integer = xlBook.Worksheets.Count '←問題A

        'ファイル保存
        xlBook.SaveAs("C:\temp\test.xls")
        MRComObject(xlSheet)
        MRComObject(xlSheets)
        xlBook.Close(False) 'bookを閉じる
        MRComObject(xlBook)
        MRComObject(xlBooks)
        xlApp.DisplayAlerts = True
        'ファイルクローズ
        xlApp.Quit()
        MRComObject(xlApp)

[ツリー表示へ]
タイトルRe: Excelのプロセスについて
記事No2765
投稿日: 2005/12/15(Thu) 21:01
投稿者じゃんぬねっと
参照先http://jeanne.wankuma.com/
>         Dim intSheetCnt As Integer = xlBook.Worksheets.Count '←問題A

Worksheets オブジェクトが暗黙的に取得され、参照を解放するタイミングを失っているからです。
変数に取り、しっかりと解放しましょう。

また確実に解放するために、Try 〜 Finally の実装をしましょう。
この実装を意識することで、こういったミスは防げます。

hhttp://jeanne.wankuma.com/tips/programing/02-releasecom.html

[ツリー表示へ]
タイトルRe: Excelのプロセスについて
記事No2766
投稿日: 2005/12/15(Thu) 21:31
投稿者花ちゃん
>         xlBooks = xlApp.Workbooks
>         Dim intSheetCnt As Integer = xlBook.Worksheets.Count '←問題A

すでに xlBooks がそんざいするのですから
 
          Dim intSheetCnt As Integer = xlBooks.Count

で取得できるかと。

[ツリー表示へ]
タイトルRe^2: Excelのプロセスについて
記事No2771
投稿日: 2005/12/16(Fri) 09:19
投稿者徳蔵丸
おはようございます。

じゃんぬねっとさん、花ちゃんさん、ご返答ありがとうございました。

Font変更もxlRange.Font.Size = 9だと開放されないのですね。
これも花ちゃんさんにご指摘いただいた方法で開放することができました。

花ちゃんさんさんの方法で解決することができました。
また、じゃんぬねっとさんのリンク先は大変参考になりました。
私のプログラミングの配慮不足がよくわかるページですね。
自分のPGMが恥ずかしくなりました。

本当にありがとうございました。

[ツリー表示へ]