2012-04-23 29 views
6

現在のブックを参照しながら、保存した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) {} 

、デバッグおよびcurrentsheetsname変数に時計を置く場合は、インスタンス化されるとすぐに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の新しく開いたインスタンスがある場合のみです。私は本当になぜそれが理解できません。

誰でもこれを解決する方法を知っていますか?私はここで何か間違っていますか?

+0

ActiveWorkbookに設定した後の現在の設定は何ですか? –

+0

@DougGlancy私はあなたが何を意味するか分かりません。これは、アクティブなワークブックに設定されています。デフォルトでは "Book1"です。これはWorkbookオブジェクトです。 –

+0

それは私が言ったことです。あなたがボタンから電話していたので、私はここではそうは考えていませんでしたが、時にはアドインが起動時のアクティブブックです。しかし、ショットに値する。 –

答えて

6

これは正しい動作かもしれないと思います。

新しいExcelセッションを手動で開始すると(新しいブック[Book1]が自動的に作成されます)、Book1に何もせずに既存のブックを開くと、Book1はExcelに存在しなくなりますセッション。

C#アドインを使用して同じ動作が発生していると思います。それが使用されていない場合はExcelが、一時的なワークブックを破棄します

「creamyegg」で説明したよう

2

これは正しい動作です。この問題を回避するには、別のシートを開く前にシートを使用するだけです。

空のセルを見つけて変更してください!あなたのワークブックは残っており、あなたのビジネスについて行くことができます。 :)

関連する問題