你只需要跟踪你的三个细胞的变化状况,当两个都变了,像这样的
Private Sub Worksheet_Change(ByVal Target As Range)
Static TrackChange As Integer
On Error GoTo EH
If Not Application.Intersect(Target, Me.Cells(1, 1)) Is Nothing Then
TrackChange = TrackChange Or 1 ' Set bit 0
End If
If Not Application.Intersect(Target, Me.Cells(2, 1)) Is Nothing Then
TrackChange = TrackChange Or 2 ' Set bit 1
End If
If Not Application.Intersect(Target, Me.Cells(3, 1)) Is Nothing Then
TrackChange = TrackChange Or 4 ' Set bit 2
End If
Debug.Print TrackChange
Select Case TrackChange
Case 3 ' A1, A2 changed
Application.EnableEvents = False
' update A3
Me.Cells(3, 1) = Me.Cells(1, 1) + Me.Cells(2, 1)
TrackChange = 0
Case 5 ' A1, A3 changed
Application.EnableEvents = False
' update A2
Me.Cells(2, 1) = Me.Cells(1, 1) + Me.Cells(3, 1)
TrackChange = 0
Case 6 ' A2, A3 changed
Application.EnableEvents = False
' update A1
Me.Cells(1, 1) = Me.Cells(2, 1) + Me.Cells(3, 1)
TrackChange = 0
Case 7 ' A1, A2, A3 changed
TrackChange = 0
End Select
EH:
Application.EnableEvents = True
End Sub
我能想到的多种方式去采取行动。 (1)使用工作表更改事件来查看是否填充了两个单元格,从而允许您计算第三个单元格(2)当用户更改哪个单元格并始终计算基于第三个单元格的单元格时保留跟踪(具有某种时间戳)在最后改变的两个单元上(3)使用'userform'来代替。通过选项按钮,复选框和每个文本框上的多个事件,还有很多方法可以解决这个问题。所以,对我个人而言,这个问题其实有点太广泛而无法回答(就像现在这样)。 – Ralph