2017-02-19 5 views
0

Excelでこのセル値を変更すると、VBAで単純なマクロを作成して1つのセルの値を変更する必要があります。たとえば、セルのExcel値を100に変更すると、このセル値1に追加されるマクロがトリガーされます。私は作成しましたが、問題は非常に奇妙です...このマクロは84-86回トリガしますVBAは私にこれをやっているが、私はこの問題をどのように扱うべきか分からない。VBAでマクロを自動作成したくない(自然に84〜86回ループするマクロ)

ありがとうございました!マクロの

コード:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 
    Set KeyCells = Range("D8") 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _ 
      Is Nothing Then 

     Cells(8, 4) = Cells(8, 4) + 1 

    End If 
End Sub 
+0

あなたは 'セル(8,4)'の内容を変更すると、イベントがトリガされたものを推測。 – GSerg

+0

ああ、もう一度Range( "D8")を変更して、マクロが再び開始されます。 –

+3

[Worksheet_changeマクロはExcel 2007で複数回実行しています](http://stackoverflow.com/q/32064447/11683)、[Tables - Worksheet_Change Fires Multiple Times]( http://stackoverflow.com/q/41133592/11683)または[複数のWorksheet_changeイベントが発生する](http://stackoverflow.com/q/22692270/11683)を参照してください。あなた自身を選んでください。 – GSerg

答えて

1

私はあなたのためにいくつかの上位ビットを作るしようとするでしょう。

セル「D8」を変更すると、Worksheet_Changeイベント内に入力し、セル「D8」の値を+1すると、このコードが再び発生します。これが無限ループになります。 Application.EnableEvents = Falseを追加し、Subを終了する前にそれを復元することを忘れないでください。

TargetAs Rangeを定義しているので、あなたはRange(Target.Address)を使用する必要はありません、ただTargetを使用しています。

あなたがループに入った後は、あなたがすることができますをTargetと置き換えてください。同じですからRangeは以前にIntersect(Target, Range("D8"))にチェックされています。

コード

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not Application.Intersect(Target, Range("D8")) Is Nothing Then 
     Application.EnableEvents = False 
     Target.Value = Target.Value + 1 
    End If 
    Application.EnableEvents = True '<-- restore setting 

End Sub 
関連する問題