2009-03-13 5 views
1

C#에서 Excel XP 용 COM 추가 기능을 작성하려고하는데이 기능을 사용하면 셀을 두 번 클릭하여 편집 할 수 없습니다.SheetBeforeDoubleClick from COM Addin

이 방법으로 셀을 편집하는 것을 금지하고 모든 실행을 중단한다는 상자를 팝업으로 표시하려고합니다. 이것은 매우 쉬운 일처럼 보인다 Microsoft의 문서를 통해 찾고

, 당신은 서명 func(object sheet, Range Target, ref bool Cancel)와 응용 프로그램 이벤트 AppEvents_SheetBeforeDoubleClickEventHandler를 생성하고 그 실행이 중지되도록 true로 Cancel을 설정합니다.

나는 다음과 같습니다

public void OnConnection(object application, Extensibility.ext_ConnectMode connectMode, object addInInst, ref System.Array custom) 
{ 
    Excel.Application app = application as Excel.Application; 
    app.SheetBeforeDoubleClick += Excel.AppEvents_SheetBeforeDoubleClickEventHandler(beforeDoubleClick); 
} 

void beforeDoubleClick(object sheet, Excel.Range Target, ref bool Cancel) 
{ 
    MessageBox.Show("Cannot edit cells this way sorry."); 
    Cancel = true; 
} 

메시지 상자가 표시됩니다,하지만 작동 VBA에서 같은 일이있는 경우 셀은 다음 그러나 편집 모드로 전환된다.

다음 코드를 사용하여 VB.NET 추가 기능에서 동일한 문제가 발생합니다.

Private WithEvents app As Excel.Application 
Public Sub OnConnection(ByVal application As Object, 
          ByVal connectMode As Extensibility.ext_ConnectMode, 
          ByVal addInInst As Object, 
          ByRef custom As System.Array) 
          Implements Extensibility.IDTExtensibility2.OnConnection 
    app = application 
End Sub 

Sub Worksheet1_BeforeDoubleClick(ByVal obj As Object, 
           ByVal Target As Excel.Range, 
           ByRef Cancel As Boolean) 
           Handles app.SheetBeforeDoubleClick 
    MsgBox("Double-clicking in this sheet is not allowed.") 
    Cancel = True 
End Sub 

답변

3

코드를 실행하는 데 아무런 문제가 없었습니다. '취소'가 두 번 클릭 조작을 차단했습니다.

일부 검색 결과는 MSKB에서 다음과 같이 표시되었습니다. BUG: Cancel parameter for Office events is ignored in Visual Studio .NET 2003.

취소 매개 변수를 무시하는이 동작은 Visual Studio .NET 2003 (.NET Framework 1.1)을 사용하여 만든 .NET 코드를 사용할 때 Excel 버전 2002 이하에 존재하는 것으로 보입니다.

Interop 어셈블리를 수동 조정해야하는 복잡한 해결 방법이 문서에 나와 있습니다. 꽤 많은 노력이 들지만 꽤 잘 할 수 있습니다.

2008 년 나는 VS .NET 3.5을 대상으로 2008을 사용하여 내 코드를 컴파일하고, 그런데 엑셀 2007

에 내 코드를 실행 VS 2005 또는 VS으로 업그레이드하기 쉬울 것, 사용자가 할 수 수식 입력 줄에 입력하거나 복사 - 붙여 넣기 명령을 실행하여 값을 입력 할 수 있습니다. 사용자가 값을 입력하지 못하게하려면 대신 워크 시트를 보호해야합니다.

+0

안녕하세요, 시간을 내 주셔서 감사드립니다. 나는 최근에 필자가이 기능을 필요로하는 프로젝트에서 일해 왔으며 Excel 2008에서는 .NEt 3.5를 사용하지만 VS 2008로 컴파일하지만 실제로 해결 방법을 시도 할 것입니다. 다시 한번 감사드립니다. –

+0

이 기사에 따르면 VS 2008에서는 괜찮을 것입니다. 음 ... 좋아, http://support.microsoft.com/kb/948461을 확인하시기 바랍니다. 그것은 오류가 throw되어야한다고 말하지만 그렇지 않다면 .NET 1.1이 조용히 실행될 수 있으므로 '취소 이벤트 무시'동작을 시작합니다. –