此代码(我在另一篇文章中提到的上一个问题提供的答案,必须在另一篇文章中提出另一个问题)适用于A1,B1,D1和E1。我究竟做了什么改变才能使其适用于1)其下的所有细胞或2)它们下面的选定细胞范围。换句话说,使其适用于A2,B2,D2,E2和A3,B3,D3,E3。如果您需要更多信息或问题,请询问,我会尽力使其更清晰。提前谢谢!
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Row = 1 And (Target.Column = 1 Or Target.Column = 2) Then
'new val
a1 = Range("A1").Value
b1 = Range("B1").Value
newVal = Range("D1").Value
'disable events and undo
Application.EnableEvents = False
Application.Undo
'old val
oldVal = Range("D1").Value
'diff between new and old val
diff = newVal - oldVal
Range("A1").Value = a1
Range("B1").Value = b1
Range("E1").Value = diff
're-enable events
Application.EnableEvents = True
End If
End Sub
答案 0 :(得分:0)
您只需获取相同的传入目标,并通过目标的ROW属性分配变量。然后是你拥有的每个范围(A1),用变量替换1。 “lRow”。您更改初始IF语句以允许任何行,并仍然检查以确保它是第1列或第2列。
我还将a1,b1重命名为aVal和bVal。
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim lRow As Long
If Target.column = 1 Or Target.column = 2 Then
'new val
lRow = Target.row
aVal = Range("A" & lRow).Value
bVal = Range("B" & lRow).Value
newVal = Range("D" & lRow).Value
'disable events and undo
Application.EnableEvents = False
Application.Undo
'old val
oldVal = Range("D" & lRow).Value
'diff between new and old val
diff = newVal - oldVal
Range("A" & lRow).Value = aVal
Range("B" & lRow).Value = bVal
Range("E" & lRow).Value = diff
're-enable events
Application.EnableEvents = True
End If
End Sub