2013-08-10 2 views
1

이전에 답변을 받았지만 이벤트 처리가 아직 완전히 새로운 경우 사과드립니다.새 셀을 클릭하면 잘라내어 + 이동을 삽입하려면 두 번 클릭하십시오.

내가 뭘 하려는지는 클립 보드로 잘라 내기 위해 셀을 두 번 클릭 한 다음 그 지점에 삽입 할 잘라 내기 셀의 새 셀을 클릭하면 기존 셀을 아래로 이동합니다. . 나는를 SelectionChange 해요 (

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 

    Cancel = True 
    Target.Cut 

End Sub 

...하지만 나머지는 다른 이벤트를 호출 할 필요가 주어진 나에게 명확하지 않다 :

셀을 절단 할 수있는 더블 클릭 비트는 쉽게 충분하다 가정).

어떻게 이루어 집니까? 나는 약간의 검색을했는데, 확실 할 것으로 확신합니다. 그러나 나는 적절한 용어를 검색하지 않을 것입니다.

미리 감사드립니다.

편집 : 답변 해 주셔서 감사합니다.

인기있는 후속 질문 - 잡아 늘리는 방법을 사용하여 셀을 끌 때 동일한 작업을 수행 할 수있는 방법이 있습니다. 즉, 셀을 드래그하여 삽입하는 대신 "do 당신은 "대화를 대체하고 싶습니까? Shift 키를 누른 상태에서이 작업을 수행 할 수 있음을 알고 있지만 시트를 코드화하여 드래그 앤 드롭 한 셀을 덮어 쓰지 않고 자동으로 삽입 할 수있는 방법을 찾고 있습니다.

답변

1

어때?

업데이트
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 

    Cancel = True 
    Target.Cut 

End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    If Application.CutCopyMode = xlCut Then 
     Target.Insert Shift:=xlDown 
     Application.CutCopyMode = False 
    End If 

End Sub 

:

세포 드래그 이벤트하지만 해키 해결 방법이 링크 이것은 본질적으로 드래그 할 수 http://www.mrexcel.com/forum/excel-questions/284788-challenging-post-override-cell-drag-drop-behavior-2.html

에 근거 없다, 다음 목표와 대상을 찾을 UNDO 적용 세포. 내가 작성한 유일한 추가 사항은 Application.AlertBeforeOverwriting을 추가하여 덮어 쓰기 메시지를 비활성화하는 것입니다.

Dim trigger As Boolean 
Dim flag As Boolean 
Dim busy As Boolean 
Const overwriteAlert As Boolean = False 


Private Sub Worksheet_Change(ByVal Target As Range) 

    With Target 
     If .Count = 1 And trigger Then 
      If flag Then 
      If busy Then Exit Sub 
      busy = True 
      Call MyDrag 
      flag = False 
      Else 
      flag = True 
      End If 
     End If 
    End With 

End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    flag = False 
    busy = False 
    trigger = Target.Count = 1 
    Application.AlertBeforeOverwriting = overwriteAlert 

End Sub 

Sub MyDrag() 
Dim DragAddress As String 
Dim DropAddress As String 

    With Application 
    .EnableEvents = False 
    .ScreenUpdating = False 

    DropAddress = ActiveCell.Address 
    .Undo 
    DragAddress = ActiveCell.Address 

     If Range(DropAddress).Column = Range(DragAddress).Column Then 
     .Undo 
     Else 

      With Range(DropAddress) 
      .Activate 
      .Insert Shift:=xlDown 
      .Offset(-1) = Range(DragAddress) 
      End With 

     Range(DragAddress).Delete Shift:=xlUp 
     End If 

    .ScreenUpdating = True 
    .EnableEvents = True 
    End With 

'busy = False 

End Sub 
+0

바로 그 것입니다. 그것은 나에게 오지 않았던 적절한 If 절이었습니다. 많은 감사합니다. – EndlessLoop

+0

원본 게시물의 편집을 통해 후속 조치를 요청했습니다. 검토해 주시면 감사하겠습니다. – EndlessLoop

+0

많은 것을 다시 한 번 감사드립니다. 매우 포괄적 인 솔루션입니다. 코드를 학습 연습으로 공부하겠습니다. – EndlessLoop

관련 문제