如果有人从特定范围中删除某个值,我该如何触发宏?

时间:2017-06-21 14:46:49

标签: vba excel-vba excel

我有下面的脚本几乎可以做我想要的,但是我需要它才能启动,如果有人从范围E9中删除一个值:E17。它实际上不是一个SelectionEvent,它更像是一个Change_Event,但如果更改是删除,那么在我捕获它之前,该值就会从单元格消失。我认为SelectionEvent必须调用change事件。是否有意义?如果您需要澄清,请告诉我。谢谢!

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)

Application.EnableEvents = True

If Not Intersect(Target, Range("E9:E17")) Is Nothing Then

    GetValue = ActiveCell.Value
    GetCustomer = ActiveCell.Offset(0, -1).Value

    With Sheets("LargeCustomerOP").Range("D2:D6") 'searches range in Col D
        Set Rng = .Find(What:=GetCustomer, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not Rng Is Nothing Then
            Rng.Offset(0, 1).Value = Rng.Offset(0, 1).Value + GetValue
        Else
            'value not found
        End If
    End With
End If

Application.EnableEvents = True

End Sub

2 个答案:

答案 0 :(得分:4)

将数据保存在全局变量Worksheet_SelectionChange - 事件中,并在Worksheet_Change - 事件中访问它。请参阅StackOverflow上的this example

答案 1 :(得分:0)

抱歉,没有时间编写代码,但我确定其他人可以帮助我们。

使用Worksheet_Change在隐藏工作表上创建工作表的镜像副本。你只需要反映你担心的范围。

每次更改时,请在事件中执行以下操作:

  1. 检查目标是否变为空白。如果是,则存储镜像中相同单元格的值。

  2. 将目标单元格的值复制到镜像上的同一单元格。

  3. 如果商店有值,请按照您的意愿采取行动。