4

ワークシートのボタンをクリックすると、以下のイベントが呼び出されます。

「タイプが一致しません」というエラーが表示されます

イベントがボタンが押されたことが原因である場合、元の IF の評価を停止するには、別の if ステートメントが必要だと思いますか?

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target = Range("D4") Then   'Error is here

    End If

End Sub
4

2 に答える 2

5

これ

If Target = Range("D4") Then

これに等しい

If Target.Value = Range("D4").Value Then

これは明らかにあなたが望むものではありません。Target.Valueと同じタイプではない場合、説明したエラーが発生する可能性がありますRange("D4").Value

あなたが欲しいのはこれです:

If Not Intersect(Target, Range("D4")) Is Nothing Then

編集私はあなたのエラーを再現することができました。Target範囲のサイズが異なる場合、Range("D4")つまり複数のセルにまたがる場合に発生します。@Dick Kusleiskaが指摘しているように、2つのうちの1つがエラー値の場合にも発生します。多分それは他のことによっても引き起こされます、私にはわかりません。とにかく、ポイントは、あなたのIf状態が間違っているということです!

于 2012-06-13T15:58:12.270 に答える
3

これを試して

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa
    Application.EnableEvents = False

    If Not Intersect(Target, Range("D4")) Is Nothing Then

    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub

編集

また、エラー処理を使用し、.EnableEventsを false に設定して、無限ループを回避することをお勧めします:)

于 2012-06-13T15:54:38.307 に答える