tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: Excel ComObjectの解放
投稿日: 2014/10/29(Wed) 12:06
投稿者tera
> > 何を解放し忘れているのでしょうか?
>
> 念のため、ReleaseComObject の戻り値を確認してみて下さい。
> それらすべてが 0 を返していますか?
>
> もしも 1 以上を返してくるケースがあった場合は、そのオブジェクトに対して
> 複数の参照カウントが生成されていますので、0 になるまで ReleaseComObject を
> 繰り返すか、もしくは、FinalReleaseObject で処理することになります。
>
> (なお、0 未満の値を返してきている場合は 過解放です)
>
>
> > xlSheet_g = DirectCast(xlSheets("グラフ"), Excel.Worksheet)
> この xlSheets に関する解説が無いようですが、xlSheets が原因というわけではないのですね?
>
ReleaseComObject で戻り値を確認してみたところ
xlSheetsの後ろで戻り値が1になっていました。

'確認用
Dim xlSheet_g As Excel.Worksheet
xlSheet_g = DirectCast(xlSheets("グラフ"), Excel.Worksheet)
cnt = System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet_g)

xlSheetsは下のxlSheetsを使用しています。
xlSheetsの解放はExcelCloseのところで行っているのでは足りないということだと思いますが
何を解放していないのかわからないです。


Private Sub ExcelOpen(ByVal FilePath As String, ByVal SheetName As String)
        'Excel のオープン処理用プロシージャ
        xlClose = False   '起動中は、ユーザが Excel を閉じれないように
        xlApp = New Excel.Application
        'Excel の WorkbookBeforeClose イベントを取得
        AddHandler xlApp.WorkbookBeforeClose, AddressOf xlApp_WorkbookBeforeClose

        xlBooks = xlApp.Workbooks
        If FilePath.Length = 0 Then
            '新規のファイルを開く場合
            xlBook = xlBooks.Add
            xlSheets = xlBook.Worksheets
            xlSheet = DirectCast(xlSheets.Item(1), Excel.Worksheet)
        Else
            '既存のファイルを開く場合
            xlBook = xlBooks.Open(FilePath)
            xlSheets = xlBook.Worksheets
            xlSheet = DirectCast(xlSheets(SheetName), Excel.Worksheet)
        End If
        xlApp.Visible = True
    End Sub


>
> > xlChart = DirectCast(xlCharts(0), Excel.ChartObject)
> これは
>  xlChart = DirectCast(xlCharts.Item(1), Excel.ChartObject)
> だとどうでしょう。
変更してみたところ
COMException' のハンドルされていない例外が mscorlib.dll で発生しました
HRESULT からの例外:0x800A03EC
となりました。

>
> 参照設定しているライブラリによっては、ChartObjects に既定のインデクサが無い場合があるためです。
> また、Excel のコレクションオブジェクトは、基本的には 1 からカウントするはず…。
解放忘れを除けばグラフの最大値も変更されてますし
動きにおかしなところはなさそうです。
参照設定しているライブラリは
Excel 14.0 Object Library
Office 14.0 Object Library です。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。