在Excel VBA中更新非Target单元格的值

时间:2018-01-12 01:24:47

标签: excel vba

我在查找如何根据两列中的值更正事件时找到了attached。我不是程序员,所以当我将两种不同的解决方案结合在一起时,我可能会对代码进行屠杀。

现在,它正如我想要的那样工作。更改偏移单元格值会强制Excel将目标值替换为我指定的值。我想要实现(并且不确定是否可能),是反转代码。基本上,如果以相反的顺序输入值,我想更改偏移单元格。如果用户在A列中输入“Bravo”,然后在C列中输入“Gamma”,则代码会将单元格值更改为“Beta”。

我想要实现的是,如果用户在第A列中输入“Bravo”,那么Excel仍会看到这些单元格的组合并仍然用“Beta”替换该值。我知道这是附加代码,但是当目标单元格不是要更新的值时,我找不到任何支持替换单元格的东西。

提前致谢!

Dim oldCellAddress As String
Dim oldCellValue As String
Private Sub Worksheet_Change(ByVal Target As Range)
    oldCellValue = "Bravo"
        If Target = "Bravo" And Target.Offset(0, -2) = "Gamma" Then
        Target.Value = "Beta"
        Application.EnableEvents = True
    End If
End Sub

2 个答案:

答案 0 :(得分:0)

有两种可能的情况如下......

情景1:

如果工作表上的ANY CELL发生了更改,则以下代码将检查column ACcorresponding row的内容,并更改{{1}的内容}}

Target Cell

情景1:

如果Private Sub Worksheet_Change(ByVal Target As Range) If Target.CountLarge > 1 Then Exit Sub Dim r As Long r = Target.Row On Error GoTo Skip: Application.EnableEvents = False If Cells(r, "A") = "Bravo" And Cells(r, "C") = "Gamma" Then Target.Value = "Beta" End If Skip: Application.EnableEvents = True End Sub 发生了更改,则会触发更改事件并检查a cell in column Dcolumn AC中的内容并更改corresponding row

Target Cell in Column D

答案 1 :(得分:0)

这可能符合您的需求:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim colnum As Long, v As Variant

    colnum = Target.Column
    v = Target.Value

    If colnum = 1 Then
        If v = "Bravo" And Target.Offset(0, 2) = "Gamma" Then
            Application.EnableEvents = False
                Target.Value = "Beta"
            Application.EnableEvents = True
        End If
        Exit Sub
    End If

    If colnum = 3 And v = "Gamma" And Target.Offset(0, -2) = "Bravo" Then
        Application.EnableEvents = False
            Target.Offset(0, -2).Value = "Beta"
        Application.EnableEvents = True
    End If
End Sub

例如,如果用户将 Bravo 放在单元格 A1 并且 C1 已包含 Gamma ,则代码放入 A1 中的 Beta (代码更正 A1 条目)

如果用户将 Gamma 放入单元格 C1 ,单元格 A1 已包含 Bravo ,代码更正 A1