2011-12-28 2 views
2

Excel 용 VSTO 추가 기능을 작성하고 있으며 시트를 잠그고 암호로 보호하면 추가 기능 만이 사용자에게 쓸 수 있습니다. 그것을 볼 수 있습니다), 사용자가 시트를 편집하려고하면 "이 시트가 잠겨 있습니다"팝업이 나타납니다. 해당 프롬프트가 여전히 보류중인 사용자 입력 인 경우 추가 기능이 시트에 쓰려고 시도하면 Excel이 충돌합니다. 시트에 쓰는 작업에는 보호 해제, 데이터 쓰기, 다시 잠그는 작업이 포함됩니다. 추가 기능은 언제든지 데이터를 쓸 수 있도록 직렬 포트를 통해 외부 소스에서 데이터를 캡처합니다.팝업이 Excel의 전경에 있는지 확인하십시오.

다시 만들기 : 1. 추가 기능을 사용하여 시트를 잠급니다. 2. 사용자가 시트 내용 편집을 시도합니다. 3. 시트가 잠겨 있기 때문에 시트 내용을 편집 할 수 없다는 메시지가 나타납니다. 4. 데이터가 직렬 포트에 들어오고 추가 기능은 사용자가 던져진 프롬프트를 확인하기 전에 시트의 잠금을 해제하고 데이터를 쓰고 시트를 잠그려고 시도합니다. 5. Excel 바이트에 먼지가 있습니다.

제안 사항? 나는 숨겨진 "마스터"시트와 보이는 시트를 유지하고 숨겨진 시트를 참조하기 위해 Excel 공식 또는 명명 된 범위를 사용하는 아이디어를 가지고 놀고있었습니다. 그러나 이는 사용자가 편집 및 잠재적 인 데이터 손상에 노출 될 수 있습니다. 데이터는 가능한 한 편집 불가능해야합니다.

업데이트 : 나는 COMException을 잡는 것에 만족할 것이므로 Excel을 죽이지는 못하지만 일반적인 "catch (Exception ex)"는 도움이되지 않는다.

답변

1

쓰기 작업을 수행 종료 기능을 실패하는 경우

1

VBA에서는 UserInterFaceOnly : = True로 시트를 보호 할 수 있습니다. 이는 코드가 여전히 시트에 쓸 수 있음을 의미합니다. From this link VSTO 추가 기능에서도 마찬가지입니다. 검사가 문제가 분명히

catch(Exception) 

가 수행되었다

private bool IsExcelInteractive() 
    { 
     try 
     { 
      Globals.ThisAddIn.Application.Interactive = Globals.ThisAddIn.Application.Interactive; 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
+0

팝업 창을 제거합니다 사용자가 어떤 식 으로든 폼을 계속 편집하려고 시도하면 COMException을 발생시키지 않고 코드를 계속 실행하기 전에 사용자가 "확인"을 클릭해야하는 오류 상자가 표시됩니다. –

1

당신은 시트를 대화 형 모드 또는 액티브 셀에 확인하기 위해 확인을 넣어 수는, null가 아닌 COMException에 관해서는 일반적인 범용 캐치로서 기능하지 않습니다. 라인을 추가

using System.Runtime.InteropServices; 

다음 내 시도에

catch(COMException) 

추가는 ... catch 블록은 나 오류가 더 잘 처리 할 수 ​​있습니다. 일부 코드와 함께 사용하여 몇 번이나 실패한 작업을 다시 시도하십시오.

SendKeys.SendWait("{ESC}"); 

더 나은 것으로 보이는군요. 그러나 맹목적으로 최전선 프로그램에 이스케이프 키를 보내면 몇 가지 문제가 발생할 수 있지만 화면에서 문제를 해결하기 위해주의를 기울일지도 모르는 사용자를 기다리는 무한 루프에 앉아있을 수는 없습니다. 직렬 포트가 데이터를 버퍼링하지 못하도록 막고 데이터가 충분히 빠르게 처리되지 않으면 데이터를 삭제하는 것으로 보입니다.

1

대신 셀의 클릭에서이 작업을 수행하는, 당신은 리본과이 작업을 수행의 클릭에 버튼을 추가 할 수 있습니다,이 방법은 그러나, 이미 UserInterFaceOnly = true를 설정 한

+0

문제는 사용자 개입없이 백그라운드에서 작업을 수행한다는 것입니다. 직렬 포트에 들어오는 데이터를 처리하고 있습니다. 데이터가 예정되어 있지 않으므로 사용자가 Excel과 상호 작용하는 경우. 편집 할 수있는 셀이 열려 있거나 셀을 잠근 상태에서 셀을 잠글 수 없기 때문에 VSTO 추가 기능이 Excel과 상호 작용하려고하면 추가 기능이 사용자에게 유리하게 작동하지 않습니다. 이 문제를 해결하기 위해 내가 생각해 낸 트릭에 대한 답을보십시오. –

관련 문제