首先我要说的是,编程不是我的强项,但我会很感激任何帮助。
我尝试使用以下公式来清除单元格 AQ 中的内容,当单元格 D(在同一行)的值发生变化时。目前,只有当单元格 D 中的值更改为 1 时,AQ 中的内容才会被清除(可能是由于“如果目标 = 1,则”这一行所致)。我该用什么来代替“1”,以便所有更改,从任意值到任何值,都会启动单元格 AQ 的 ClearContents 指令吗?
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D7:D506")) Is Nothing Then
If Target = 1 Then
Range("AQ" & Target.Row).ClearContents
End If
End If
End Sub
答案1
为了确保发生了真正的更改,我们首先将所选单元格的值保存为公共变量。由于您可以一次选择多个单元格,因此我决定使用公共集合。
然后,当发生变化时,我们会将该单元格的新值与集合中的旧值进行比较,并且只有当它们不匹配时,才清除 AQ 的内容。类似于:
Public coll As New Collection
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cel As Range
Set coll = New Collection
If Not Intersect(Target, Range("D7:D506")) Is Nothing Then
For Each cel In Target
coll.Add cel.Value, cel.Address
Next cel
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D7:D506")) Is Nothing Then
If Not Target.Value = coll(Target.Address) Then
Range("AQ" & Target.Row).ClearContents
End If
End If
End Sub
编辑已更新,可在选择多个单元格时正常工作。
显然,如果您在没有先实际选择单元格的情况下更改值Range("D7:D506")
,则此代码将引发错误。
想想看,如果你删除了值,你可以一次编辑多个单元格。那么这段代码也会抛出错误。但我们可以使用与 中相同的方法解决这个Worksheet_Change
问题Worksheet_SelectionChange
:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range
If Not Intersect(Target, Range("D7:D506")) Is Nothing Then
For Each cel In Target
If Not cel.Value = coll(cel.Address) Then
Range("AQ" & cel.Row).ClearContents
End If
Next cel
End If
End Sub