掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
EXCELのプロセスに関して (ID:147413)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> Dim xlSheet As Excel.Worksheet = CType(xlSheets.Item(1), Excel.Worksheet) > xlSheet = xlSheets.Item(1) 'シートの選択 一つの変数に、連続して 2 回代入しているのは何故ですか? Dim a As Integer = 1 a = 2 と書いたら、先に代入した方が使われることは無いですよね。 > xlSheet.Copy(After:=xlBook.Worksheets(1)) 'シートのコピー After 引数に指定するオブジェクトも、変数にとって ReleaseComObject が必要です。 > xlSheet = xlSheets.Item(2) '再度シートを選択 変数 xlSheet によって参照されていた .Item(1) を ReleaseComObject することなしに、 新たに別のオブジェクト .Item(2) を代入しているため、解放漏れが発生しています。 > Dim xlSheet2 As Excel.Worksheet = CType(xlSheets.Item(2), Excel.Worksheet) > xlSheet2 = xlSheets.Item(2) 'シートの選択 ここでも、無駄な代入処理が行われています。 > xlSheet2.Copy(After:=xlBook.Worksheets(2)) 'シートのコピー 解放漏れ。早期解放が必要な場合は、COM オブジェクトは逐一変数に受けましょう。 > xlSheet2 = xlSheets.Item(2) '再度シートを選択 解放漏れ。前のオブジェクトを解放せずに次のオブジェクトを代入してはいけません。 > 'COM オブジェクトの解放 解放順が危ういです。内側のオブジェクトから解放しましょう。 今回の場合で言えば、 Range → Sheet/Worksheet → Sheets → Workbook → Workbooks → Application の順になります。(Close 処理は、適宜、これらの間に挟み込みます)
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.