如果用户更改某个值,则避免 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
我想了解如何解决我的问题。 这是情况: 我在 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