3

この質問は2010年に質問され、回答されましたが、由緒あるBuggabill氏の指示に従い、マクロを実行すると(ターゲットセルを編集して)、Excelがすぐにクラッシュします。コードは次のようになります。

Private Sub Worksheet_Change(ByVal target As Range)
    If target.Address = "$A$1" Then
        ActiveWorkbook.Worksheets("Sheet2").Range(target.Address).Value = target.Value
    End If
End Sub

Sheet1の下にあるバージョンのマクロ(Sheet2のA1にターゲット値をプッシュする)とSheet2の下にある別のバージョンのマクロ(逆を行う)を作成しました。マクロが1つしかない場合、これは正常に機能しますが、私の意図は、どちらかのシートに値を入力し、新しい値を両方の入力セルに伝播できるようにすることです。Excelは循環参照であるため、クラッシュしますよね?これを回避する方法はありますか?

4

2 に答える 2

4

循環参照ではなく、スタックオーバーフローだと思います;)

マクロの実行中にイベントをオフにすることを検討してください。

Application.EnableEvents = False
...
Application.EnableEvents = True

このように、他のシートに値を突っ込んでいるときに、他のイベントハンドラーが呼び出されることはありません。

于 2013-01-16T01:05:50.630 に答える
0

最初のものの中にある場合は、別のものを追加するだけです。

Private Sub Worksheet_Change(ByVal target As Range)
    If target.Address = "$A$1" Then
        If ActiveWorkbook.Worksheets("Sheet2").Range(target.Address).Value <> target.Value
            ActiveWorkbook.Worksheets("Sheet2").Range(target.Address).Value = target.Value
        End If
    End If
End Sub

これにより、2つの値がすでに一致しているときに実行しようとするのを防ぐことができます。更新を行う前に、それらが同じであるかどうかを確認します。

于 2013-01-16T01:07:02.110 に答える