如果用户更改某个值,则避免 Worksheet_Change 事件

Avoid Worksheet_Change event if user changes a certain value

我想了解如何解决我的问题。 这是情况: 我在 A2 或 B2 字段中输入值。在 I2 字段中有一个公式应该解析 A2 中的输入值:

=IF(LEFT([@[Value 1]];3) = "240";MID([@[Value 1]];4;9);IF(LEFT([@[Value 2]];3)="240";MID([@[Value 2]];4;9);""))

使用 VBA 我将值从 I2 复制到 C2。我这样做是因为我想让用户更改该值,但因此不要删除字段中的公式。 问题是,当我在下面的行中输入值时,用户在 C2 中更改的值将再次从 I2 字段复制。

我的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    Dim LastRow1 As Integer
    Dim Row1 As Integer
    Dim LastRow2 As Integer
    Dim Row2 As Integer
    Dim LastRow3 As Integer

    Row2 = WorksheetFunction.Match(Target, Range("I:J"), 0)
    LastRow2 = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    If Not Intersect(Target, Range("A1:A" & LastRow2)) Is Nothing Then
        For Row2 = 2 To LastRow2
          Cells(Row2, 3) = Range("I" & Row2).Value
        Next Row2
    End If
End Sub

程序示例:

A2 值 = 24089745312045697845 I2 中的公式解析出 this = 897453120 并将这个值复制到 C2

用户更改了 C2 中的值,所以假设他在那里写了 MODIFIED。

下一步: A3 值 = 24053698712664234789 I3 中的公式解析出 this = 536987126 并将此值复制到 C3 但与此同时,C2 中的值被改回 897453120 - 我想在那里保留单词 MODIFIED。

如果我没理解错的话...

    For Row2 = 2 To LastRow2
        'value has been already changed, do not recalculate
        If Cells(Row2, 3) <> Range("I" & Row2) Then GoTo SkipNext
        Cells(Row2, 3) = Range("I" & Row2)
SkipNext:
    Next Row2

注意:使用以下条件,如果用户清理了"C1",您将能够再次重新计算它到 "C" & Row2 范围。

If Cells(Row2, 3) <> "" Then GoTo SkipNext