への参照がWorksheet
あり、その親を閉じるとWorkbook
、参照は消えません。しかし、これらのシートが存在しないことを確認する方法がわかりません。のチェックがnull
機能しません。
例:
Workbook book = Globals.ThisAddIn.Application.ActiveWorkbook;
Worksheet sheet = (Worksheet)book.Worksheets[1]; // Get first worksheet
book.Close(); // Close the workbook
bool isNull = sheet == null; // false, worksheet is not null
string name = sheet.Name; // throws a COM Exception
これは、シートにアクセスしようとしたときに発生する例外です。
System.Runtime.InteropServices.COMException was caught
HResult=-2147221080
Message=Exception from HRESULT: 0x800401A8
Source=MyProject
ErrorCode=-2147221080
StackTrace:
at Microsoft.Office.Interop.Excel._Worksheet.get_Name()
at MyCode.test_Click(Object sender, RibbonControlEventArgs e) in c:\MyCode.cs:line 413
InnerException:
ワークブックの削除イベントを確認できれば問題にはなりませんが、Excel ではイベントが提供されません (これは非常に面倒です)。
これらのワークシートを使用しないようにする便利な方法はありますか?