掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数Excelファイルオープンにおける、オブジェクト解放について (ID:146856)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> exlExcelBook = exlExcelApp.Workbooks.Open(strDirPath & "\" & Me.lstTargetFile.Items(intFileList)) exlExcelApp.Workbooks.Open ではなく、 exlBooks.Open を使うべきかと。せっかく変数に取ってあるのですし。 > exlExcelApp.Visible = True > exlExcelApp.DisplayAlerts = False For Each ループの内側で、これらを毎回実行する必要は無い気がします。 > For i = 1 To exlExcelBook.Sheets.Count exlExcelBook.Sheets.Count ではなく、 exlSheets.Count を使うべきかと。 > exlExcelSheet = exlExcelBook.Sheets(i) exlExcelBook.Sheets(i) ではなく、 exlSheets(i) を使うべきかと。 > Dim exlCells As Excel.Range = exlExcelSheet.Cells > For iRows = intEmployeeDataFromRows To intEmployeeDataToRows > '全シートのexlCellsに対する参照処理 > Next この中で、ReleaseComObject が行われていない場所はありませんか? > MRComObject(exlCells) > exlCells = Nothing 変数への Nothing 代入は、既に MRComObject 内で行われているようですが、 それだけでは不足だったのでしょうか? > If Not exlExcelBook Is Nothing Then この時点で、exlExcelBook が Nothing になる事は無いように思えます。 > If Not exlExcelBook Is Nothing Then > Try > exlExcelBook.Close(False) > Finally > MRComObject(exlExcelBook) > End Try > End If > exlExcelBook = Nothing > MRComObject(exlSheets) > exlSheets = Nothing > MRComObject(exlBooks) > exlBooks = Nothing Range → Sheet → Workbook → Sheets → Workbooks の順に解放していますが、 念のため、下位のオブジェクトから行っていった方が良いと思います。 Range → Sheet → Sheets → Workbook → Workbooks の順に書き換えてみてください。 > exlExcelApp.Quit() > intFileCnt = intFileCnt + 1 > Next > 'Excelの結果に応じて、画面のListViewの編集処理 > If Not exlExcelApp Is Nothing Then > Try > exlExcelApp.Quit() ループ内の exlExcelApp.Quit は問題があるように思えます。 Quit するなら、ReleaseComObject もセットで行うべきですし、 Quit した後で、2回目以降に exlExcelApp を使い続けるべきではありません。 > If Not exlExcelApp Is Nothing Then > Try > exlExcelApp.Quit() > Finally > MRComObject(exlExcelApp) > End Try > End If > exlExcelApp = Nothing 最後の Nothing 代入は、何を意図しているのでしょうか? 「If Not exlExcelApp Is Nothing Then」の内側では、 MRComObject によって、既に Nothing になっているようですし、 If ブロック内を処理していないなら、既に Nothing になっているハズですよね。 > Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False) どこかで見たコード…。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.