2013-08-21 2 views
2

Excel 추가 기능을 작성하고 있습니다. 다음은 내 코드입니다Application.ActiveWorkbook이 Excel Addin에서 null입니다.

private void ThisAddInStartup(object sender, EventArgs e) 
{ 
    Excel.Sheets sheets = Application.ActiveWorkbook.Sheets; 
    _worksheet = (from Excel.Worksheet sheet in sheets where sheet.Name.Contains(SheetName) select sheet).FirstOrDefault(); 

    Application.SheetChange += ApplicationSheetChange; 
} 

디버깅 할 때 모든 것이 잘됩니다. 그러나 하드 드라이브에서 직접 Excel 파일을 열면 Application.ActiveWorkbooknull으로 표시됩니다. 아무도 이걸 이해하도록 도와 줄 수 없나요?

Excel 파일을 열 때 추가 기능을 시작하려고합니다. 기본적으로 내 추가 기능은 통합 문서를 Excel에서 변경 내용을 추적하고 필요한 작업을 수행하고 있습니다.

중요한 점은 Office 2007, Visual Studio 2012를 사용하고 있습니다. 프로젝트 파일을 변경하고 Office 14 부분을 12으로 바꾼 다음 솔루션을 실행할 수 있습니다.

답변

4

ThisAddIn_Startup을 대신하고 ThisAddInStartup을 사용한다고 가정합니다. 그렇지 않다면 아마도 문제 일 것입니다.

ThisAddin_Startup 메서드 내에서 문서에 액세스하지 않는 것이 좋습니다. 이는 Office가이 방법을 실행할 때 문서가 준비되어 있지 않아서 이상한 동작이 발생할 수 있기 때문입니다. 대신 사용자가 문서를 열고 코드를 실행할 때 발생하는 이벤트에 연결합니다. (: 나는이 코드를 테스트하지 않은 있지만 작동합니다 주) : 그것은의 모양은

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    // Hook into the workbook open event 
    this.Application.WorkbookOpen += new AppEvents_WorkbookOpenEventHandler(WorkWithWorkbook); 
} 

private void WorkWithWorkbook(Microsoft.Office.Interop.Excel.Workbook workbook) 
{ 
    // Workbook has been opened. Do stuff here. 
} 

체크 아웃은 MSDN 문서를 응용 프로그램 수준의 애드 작성에. 특히 응용 프로그램이 시작될 때 문서에 액세스하는 것에 대해 이야기하는 부분에 특히주의하십시오.

http://msdn.microsoft.com/en-us/library/vstudio/bb157876.aspx

+0

예. ThisAddIn_Startup입니다. Resharper가 나를이 메소드의 이름을 변경하게했습니다. 내가 사무실에서 돌아 오면 한번 해보도록하겠습니다. – Sandy

+0

디버깅 중에 'WorkWithWorkbook' 이벤트가 발생하지 않았습니다. 그러나 하드 드라이브에서 직접 Excel을 실행하면이 방법을 사용할 수 있습니다. 감사. – Sandy