2016-09-26 2 views
0

셀 선택기가 움직일 때 활성 셀의 테두리 색을 강조 표시하는 VBA 코드를 사용하고 있습니다. 내 워크 시트에 열 머리글을 마우스 오른쪽 버튼으로 클릭하면Excel 2013 하위 작업이 중지됩니다.

코드는

Private mOutline As Shape 
Private Const SelectedShapeName As String = "Selection Box" 

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 

    Dim SelectedShape As Shape 
    Dim SelectedArea As Range 

    On Error Resume Next 
    For Each SelectedShape In Sh.Shapes 
     If SelectedShape.Name = SelectedShapeName Then 
      SelectedShape.Delete 
     End If 
    Next SelectedShape 

    For Each SelectedArea In Selection.Areas 
     Set mOutline = ActiveSheet.Shapes.AddShape(msoShapeRectangle, SelectedArea.Left, SelectedArea.Top, SelectedArea.Width, SelectedArea.Height) 
     With mOutline.OLEFormat.Object.ShapeRange 
      .Fill.Visible = msoFalse 
      .Line.ForeColor.RGB = RGB(255, 0, 0) 
      .Line.Transparency = 0 
      .Line.Weight = 3 
     End With 
     mOutline.Name = SelectedShapeName 
    Next SelectedArea 
    On Error GoTo 0 End Sub 

입니다, 엑셀이 갑자기 작동을 중지하고 존재한다.

이 오류의 원인을 아는 사람이 있습니까? 그렇다면이 코드를 수정하여 코드를 수정할 수 있습니까?

감사합니다.

+1

오류에'꺼내 Next'를 다시 시작하고 디버거를 통해 단계. 어떤 선이 충돌을 일으켰습니까? – Comintern

+0

줄 'Set mOutline = ActiveSheet.Shapes.AddShape (msoShapeRectangle, SelectedArea.Left, SelectedArea.Top, SelectedArea.Width, SelectedArea.Height)에서 런타임 오류'1004 ' "특정 값이 범위를 벗어났습니다."가 나타납니다. ' –

+0

"열 머리글을 마우스 오른쪽 버튼으로 클릭"이라고 말하면 * 셀 * 또는 열 선택 영역을 언급하고 있습니까? – Comintern

답변

0

코드가 Excel에서 처리하기에는 너무 큰 셰이프를 추가하려고합니다. 마우스 오른쪽 버튼을 클릭하면 전체 열이 선택되므로 SelectedArea.Top은 0이고 SelectedArea.Height은 다소 불명확합니다 (내 컴퓨터의 15728640). 이로 인해 ActiveSheet.Shapes.AddShape이 실패하게됩니다.

On Error Resume Next 줄을 완전히 제거하십시오. 1004 오류를 처리하는 대신이를 무시합니다. 그런 다음 코드의 다음 줄은 존재하지 않는 OLEObject을 참조 해제하려고 시도하고 두 번째로 무시 된 오류 일 것입니다. 그런 다음 세 번째 무시 된 오류가 될 null 참조에 속성을 할당하려고 시도합니다. 어느 것이 Excel을 작동시키는 지 알아 내기 위해 테스트하지는 않겠지 만 은 2 번째 또는 3 번째가 액세스 위반을 일으키는 것으로 추측합니다.

은 유효한 Target가 있는지 테스트하여 오류가 발생하지 않도록, 더 나은 적절한 오류 처리를 추가하거나 다음 중 하나를

'Assuming you want to limit to one cell 
If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then Exit Sub 
관련 문제