現在のブックへの参照を保持したまま、保存されたExcelブックを開こうとしています。問題は、保存したブックを開くとすぐに、元のブックがアクセス時に例外をスローすることです。
これがデモンストレーション用のコードスニペットです。これをリボンボタンのイベントハンドラーに入れてテストします。
try
{
string workbookPath = @"C:\Temp\Test.xlsx";
Workbook current = Globals.ThisAddIn.Application.ActiveWorkbook;
Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Open(workbookPath);
current.Activate(); // throws an exception
Sheets sheets = current.Worksheets; // throws an exception
string name = current.Name; // throws an exception
}
catch (Exception ex) {}
デバッグしてウォッチと変数を設定するとcurrent
、インスタンス化されるとすぐに、他の変数にアクセスすると例外がスローされることがわかります。sheets
name
newWorkbook
スローされる例外は
System.Runtime.InteropServices.COMException was caught
Message=Exception from HRESULT: 0x800401A8
Source=WorkbookTest
ErrorCode=-2147221080
StackTrace:
at Microsoft.Office.Interop.Excel._Workbook.Activate()
at WorkbookTest.Ribbon1.button1_Click(Object sender, RibbonControlEventArgs e) in C:\Temp\WorkbookTest\WorkbookTest\Ribbon1.cs:line 25
InnerException:
最も奇妙なことは、これがExcelの新しいインスタンスでのみ発生することです。Excelを開き、最初のブックを閉じて新しいブックを開くと、問題なく動作します。これが失敗するのは、新しく開いたExcelのインスタンスがある場合のみです。それがなぜなのか本当にわかりません。
誰かがこれを修正する方法を知っていますか?私はここで何か間違ったことをしていますか?