2017-03-13 3 views
1

列Bを監視するこの基本的なworksheet_change関数を作成しました。列Bのセルが削除されると、列Cの削除も更新されます。唯一の問題は、これが変更イベントであるため、一度に2つ以上のセルが変更されると、タイプの不一致エラーがスローされることです。これは、タイプの不一致である ""へのTarget.Address(s)の比較のためです。 1つのセルだけが選択され、複数のセルを選択してもクラッシュしない場合にのみ、この問題を修正する方法はありますか?セルの選択と型の不一致エラー

Private Sub Worksheet_Change(ByVal Target As Range) 


Dim KeyCells As Range 
Set KeyCells = Range("B2:B51") 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 
     If Range(Target.Address).Value = "" Then 
      Range("C" & Target.Row).Clear 
     End If 
    End If 
End Sub 
+1

追加:上記のあなたの質問ごとに、あなたはイベントが上であることを確認するためにこれを行うことができます。

また、もちろんあなたは、If Target.Count = 1 Then ...

編集を行うことができます'もしTarget.Count> 1ならばExit Sub'。 – BruceWayne

+1

ああ!したがって、範囲で.Count関数を使用することができます。それはとても便利です。私に教えてくれてありがとう!私はあなたに報いることができるように答えの形であなたのコメントを配置してください。 – Brad

+0

また、 'Target(Target) 'はすでにRangeであるため、' Range(Target.Address) 'を使う必要はありません。単純に' Target'を使います。全行で 'If Not Application.Intersect(KeyCells、Target))は何もない' –

答えて

2

変更Target範囲が複数のセルであるならば、単純にチェックするには、単に範囲内のセルをカウントすることができます。

コメントで述べたように、あなたがサブを宣言した直後に、あなたが追加することができます。

If Target.Count > 1 Then Exit Subを。 、Range`として点心KeyCells `前

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Count > 1 Then 
    Application.EnableEvents = True 
    Exit Sub 
End If 

' Code here that will run, if the Target is just one cell 

End Sub 
関連する問題