■No35251に返信(たこさんの記事) > Dim check As Boolean = False > For Each sh In xlsSheets > If CType(sh, Excel.Worksheet).Name = strSheetName Then > check = True > Exit For > End If > Next
ここがマズイですね。 MRComObject(sh) が明らかに漏れています。
また、 No35252 でも紹介したように、COM オブジェクトに対して For Each を使うと、 System.Runtime.InteropServices.ComTypes.IEnumVARIANT インターフェイス (を実装した EnumeratorViewOfEnumVariant クラス) の解放を行うことが難しくなるので For ループ または Do ループ あるいは While ループ に置き換えることをお奨めします。
> Private _ExcelVisible As Boolean = True > Friend Property ExcelVisible As Boolean > Set(value As Boolean) > _ExcelVisible = value > If Not _xlsApplication Is Nothing Then _xlsApplication.Visible = _ExcelVisible > End Set > Get > Return _ExcelVisible > End Get > End Property
フラグ管理したいのであれば _xlsApplication などの COM オブジェクトを公開してはいけません。 ExEx1.xlsApplication.Visible を直接操作されたら、上記の _ExcelVisible フラグが連動しなくなりますよね?