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

'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(2番目に無視されるエラー)を参照解除しようとし、3番目に無視されるエラーである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 
関連する問題