| タイトル | : Re^2: Excel ComObjectの解放 |  
| 記事No | : 11343 |  
| 投稿日 | : 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 です。 
 
 |