2016-09-26 57 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 

當我列標題,在我的工作表中單擊鼠標右鍵,Excel中突然停止工作和存在。

有沒有人知道是什麼原因導致了這個錯誤,如果是的話,我該如何修改我的代碼以避免這種情況?

謝謝。

+1

取出'上的錯誤恢復Next'並在調試步。哪條線導致崩潰? – Comintern

+0

我在'Set mOutline = ActiveSheet.Shapes.AddShape(msoShapeRectangle,SelectedArea.Left,SelectedArea.Top,SelectedArea.Width,SelectedArea.Height)行得到運行時錯誤'1004'「特定值超出範圍」 ' –

+0

當你說「右鍵單擊列標題」時,你是指*單元格*還是列選擇區域? – Comintern

回答

0

您的代碼正在嘗試添加一個太高而無法處理的形狀。當你點擊右鍵時,它會選擇整個列,所以SelectedArea.Top是0,而SelectedArea.Height是一個荒謬的大數字(我的機器上是15728640)。這導致ActiveSheet.Shapes.AddShape失敗。

完全刪除On Error Resume Next行。你忽略了1004錯誤而不是處理它。然後下一行代碼嘗試解引用不存在的(這將是第二個被忽略的錯誤),然後嘗試將屬性分配給空引用(這將是第三個被忽略的錯誤)。我不打算測試哪一個將Excel導入,但我會猜想,即第二個或第三個導致訪問衝突。

要麼添加適當的錯誤處理,或更好,避免錯誤通過測試,看看你是否有一個有效的Target

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