C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■102834 / 4階層)  エクセルのセルの画像化時のエラーについて
□投稿者/ Massa (5回)-(2024/01/14(Sun) 08:18:01)
ご指摘いただき,ありがとうございました.

まだプログラミングを始めたばかりで,
とても勉強になります.

Application.DoEvents() とリトライ処理を入れ,
想定通りに動くものを作ることができました.

解法処理はまだ理解が不十分ですが,
一つずつ処理をしていくのかなと考え,処理を入れていきます.

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



No102831 (とっちゃん さん) に返信
> ■No102830 (Massa さん) に返信
>>ありがとうございます.
>>
>>ReleaseComObjectについては理解ができていませんでした.
>
> 残念ですが、これでは全然足りません。
>
> Excel(WordやPowerPointなどほかのOffice製品も同様)のオートメーションオブジェクトは
> 細かくインスタンスが分かれているため、「.」をつけてアクセスするオブジェクト(obj.propなら、objの部分)は
> ReleaseComObjectを呼び出す必要があります。
>
> そのため、例えば
>
>> Microsoft.Office.Interop.Excel.Workbook ExcelWorkbook = ExcelApp.Workbooks.Open(excelPath);
>
> の部分は、
> ExcelApp.Workbooks の戻り値もあとで ReleaseComObjectを呼び出す必要があります。
> (workbooksを使わないのなら、workbookを取得した直後でReleaseComObjectを呼び出しても問題ない)
>
> ほかにも、ExcelWorkbook.Sheets も解放が必要ですし、sheet.Cells も解放が必要です。
>
>
>>また,C#での遅延処理は,Sleepなどでしょうか.
>>
>>以下のようにプログラムを変更して,
>>エラーが出るCopyPictureの周りでSleepを入れたのですが,
>>状況の改善は見られませんでした.
>>
> こちらですが、魔界の仮面弁士さんがリンクを貼ってくれた記事
> 「https://vba-create.jp/vba-method-copypicture/」にもありますが
> DoEvents()(C#なら、Application.DoEvents()) を呼び出して、メッセージを処理する必要があります。
>
> COM(オートメーションや、OLEも含む)のプロセス間通信はWindowsのメッセージも使って処理するため
> メッセージを処理できる必要があります。そのため、UIスレッドで動かす必要があるという制約があります。
>
> 今回のような場合、ループの最後の ReleaseComObject をやった直後あたりで
> Application.DoEvents() などを挟むのが良いと思います。
>
> ただし、このメソッドを呼び出すとメッセージを処理するため副作用が出る可能性があります。
> その点も注意が必要です。
>
解決済み
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[3]: エクセルのセルの画像化時のエラーについて /とっちゃん 返信無し
 
上記関連ツリー

エクセルのセルの画像化時のエラーについて / Massa (24/01/12(Fri) 15:21) #102826
Re[1]: エクセルのセルの画像化時のエラーについて / 魔界の仮面弁士 (24/01/12(Fri) 17:36) #102828
│└ Re[2]: エクセルのセルの画像化時のエラーについて / Massa (24/01/12(Fri) 23:26) #102830
│  └ Re[3]: エクセルのセルの画像化時のエラーについて / とっちゃん (24/01/13(Sat) 02:51) #102831
│    └ エクセルのセルの画像化時のエラーについて / Massa (24/01/14(Sun) 08:18) #102834 解決済み ←Now
Re[1]: エクセルのセルの画像化時のエラーについて / とっちゃん (24/01/12(Fri) 17:17) #102827
  └ Re[2]: エクセルのセルの画像化時のエラーについて / Massa (24/01/12(Fri) 23:15) #102829

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信