我的数据集如下所示,应始终等于100:
如果我更改其中一个值,我希望将其旁边的值调整为总和仍为100.不幸的是,当我更改任何值时,我的代码不会更新数字上方或下方的数字数字。此外,sub不会返回错误。有什么建议为什么会这样?
Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
If IsNumeric(Target) Then
If Application.WorksheetFunction.Sum(Cells(1, Target.Column), Cells(5, Target.Column)) <> 100 Then
If Target.Row > 1 Then
Cells(Target.Row - 1, Target.Column).Value = Cells(Target.Row - 1, Target.Column).Value + 100 - Application.Sum(Cells(1, Target.Column), Cells(5, Target.Column))
Else
Cells(Target.Row + 1, Target.Column).Value = Cells(Target.Row + 1, Target.Column).Value + 100 - Application.Sum(Cells(1, Target.Column), Cells(5, Target.Column))
End If
End If
End If
End If
End Sub
感谢您的帮助!
答案 0 :(得分:2)
你有几个问题:
正如共产国际在评论中指出的那样,您的End If
与If
不匹配。 (您可能打算将其用于单行If
,但单行If
不需要End If
。)
您不会在代码运行时禁用发生的事件,这可能会导致在您从代码中启动其他更改时发生奇怪的事情。 (主要仅在首次设置值时才会出现问题。)
您的Sum
函数仅在第1行和第5行添加数字。
您的代码的重构版本如下:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
Application.EnableEvents = False
If IsNumeric(Target) Then
If Application.Sum(Range(Cells(1, Target.Column), Cells(5, Target.Column))) <> 100 Then
If Target.Row > 1 Then
Cells(Target.Row - 1, Target.Column).Value = Cells(Target.Row - 1, Target.Column).Value + 100 - Application.Sum(Range(Cells(1, Target.Column), Cells(5, Target.Column)))
Else
Cells(Target.Row + 1, Target.Column).Value = Cells(Target.Row + 1, Target.Column).Value + 100 - Application.Sum(Range(Cells(1, Target.Column), Cells(5, Target.Column)))
End If
End If
End If
Application.EnableEvents = True
End Sub