2013-05-24 2 views
1

이것은 내 질문 here과 유사하지만 이러한 문제에 대해서는 제 해결 방법이 도움이되지 않으며 그 원인이 더 자세히 정의되어 있습니다. 복사 한 시트의 이름을 유지하는 폴더의 시트를 추가 할 통합 문서 수준의 사용자 지정이 있습니다.이 방법은 잘 작동하며 사용자가 시트의 이름을 바꾸지 않으면 문제가 발생하지 않습니다.사용자가 시트 이름을 변경하도록 허용합니다. VSTO

Microsoft.VisualStudio.Tools.Applications.Runtime.ControlNotFoundException: 
This document might not function as expected because the following control is missing: 
Sheet5. Data that relies on this control will not be automatically displayed or updated, 
and other custom functionality will not be available. Contact your administrator or the 
author of this document for further assistance. ---> 
System.Runtime.InteropServices.COMException: Programmatic access to the Microsoft Office 
Visual Basic for Applications project system could not be enabled. If Microsoft Office 
Word or Microsoft Office Excel is running, it can prevent programmatic access from being 
enabled. Exit Word or Excel before opening or creating your project. 

지금 닫고 Excel에서 '아무튼 개방 : 사용자가 시트의 이름을 변경하는 경우, 통합 문서를 저장 한 다음에 백업을 제공, 그들은 오류를 얻을 통합 문서 또는 워크 시트를 참조하는 모든 작업을 수행하려고합니다 시트를 새로운 위치로 옮기는 것이 도움이되지 않으며 1 장 이상의 시트가 추가되면 문제가되는 시트를 삭제하는 것이 도움이되지 않습니다. 기본 템플릿에는 6 개의 시트가 있으며 중간에 시트를 추가하려고했습니다 (여기서는 원하는 위치) 그리고 끝에 (킥을위한 것임). 이것은 도움이되지 않습니다. 추가 된 모든 시트를 삭제하고 통합 문서를 저장 한 다음 다시 열면 기능이 복원됩니다. 추가 된 시트는 VSTO에서 이름이 지정된 시트가 아니지만 주로 번호 또는 이름으로 참조됩니다 (시작하려면 6 시트가 있으므로 3 이후에 추가되면 인덱스가 4 to (ThisWorkBook.Sheets.Count-3)이거나 if Sheet.Name이 아님) 원래의 6 개 이름 중 (실제로는 절대로 사용하지 않을 것이며 예방을위한 스크립트를 작성했습니다.)

제 문제는 사용자가 일반 보고서 시트를 추가 할 수 있도록 허용해야한다는 것입니다. 디자인이 제대로 작동하지 않습니다. 즉, 시트를 추가하고 이름을 변경하고 저장 한 다음 다시 돌아올 수 있어야합니다.이 오류는 시트가 저장되거나 닫힐 때까지 발생하지 않습니다. 그 사람이 도움이 될 경우 다시 열립니다. 또한 VS2012 설치되어있는 모든 컴퓨터에서이 프로젝트를 (VSTO 방금 설치 한) 작업 한 적이없는 경우에도 복제 할 수 없습니다. 비록 모든 해당 VS2012 Mac Hines는 다른 Excel VSTO 프로젝트에 사용되었습니다. 그러나 나는 XP-Win8과 Excel Office '07 -365에 그것을 복제 할 수 있습니다.

** 내 증답 된 질문 : 사용자가 Runtime.ControlNotFoundException을 실행하지 않고 시트를 추가하고 이름을 VSTO 외부로 바꿀 수있는 방법이 있습니까?

감사합니다.

답변

1

기본적으로 통합 문서를 다시 열 때마다 VSTO 개체로 시트를 다시 초기화해야합니다. 이러한 시트는 솔루션에 하드 코딩되어 있지 않으므로 VSTO는 코드에서 이러한 항목을 찾아 런타임에 "다시 연결"하지 않으면 VSTO에서이를 인식 할 수 없습니다. 이 내용은 VSTO 설명서에서 설명합니다. http://msdn.microsoft.com/en-us/library/cc442981.aspx

하지만 시트 용으로 추가 기능이 필요하다고 생각됩니다. 통합 문서의 "코드 숨김"에 통합 될 수 있다고는 생각하지 않습니다.

+0

이 오래된 질문을 찾아 주셔서 감사합니다. 통합 문서가 열릴 때마다 실행할 스크립트를 추가하여 문제를 해결합니다 (VSTO 문서 수준 추가 기능에서 처리됨). 그것은 오프닝을 상당히 늦추지 만 작동합니다. –

관련 문제