如何更改VBA代码以使用第一个下的单元格?

时间:2014-12-22 04:09:33

标签: excel vba spreadsheet

此代码(我在另一篇文章中提到的上一个问题提供的答案,必须在另一篇文章中提出另一个问题)适用于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

1 个答案:

答案 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