清空修改的单元格的同一行中的特定单元格

我对VBA比较陌生。

下面是我的代码,只在第2行工作。

Option Explicit Public precedent Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.[D2]) Is Nothing Then If Me.precedent <> Me.[D2].Value Then Me.[F2] = "" Me.[H2] = "" Me.precedent = Me.[D2].Value End If End If End Sub 

我想这个代码运行除了第1行的每一行,因为这是我的头。

我该怎么做呢? 我会用循环吗?

它不应该那么复杂。 只要检查Target.RowTarget.Column 。 如果前者大于1 ,后者等于4 ,则触发任何你想要的操作。

相应地修改以下代码。

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row > 1 And Target.Column = 4 Then Range("F" & Target.Row) = vbNullString Range("H" & Target.Row) = vbNullString End If End Sub 

让我们知道这是否有帮助。

你不必使用循环。 既然你想省略第一行,你应该设置一个范围,你希望这个代码在修改时触发。 目前,您只是针对D2进行检查。 当您的If语句正在检查整个范围时,可以使用Target作为已更改的特定单元格(而不是使用D2)。

这里有一些代码应该做你想要的:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim rangeToCheck As Range rangeToCheck = Range(Cells(2,4),Cells(Application.ActiveSheet.UsedRange.Rows.Count,4)) 'If your range isn't dynamic, you could put static numbers here If Not Intersect(Target, rangeToCheck) Is Nothing Then 'Now checks against all of Column D, omitting Row 1 If Target.precedent <> Target.Value Then Target.Offset(0,2).Value = "" 'Clear Column F in Target Row Target.Offset(0,4).Value = "" 'Clear Column H in Target Row Target.precedent = Target.Value End If End If End Sub 

下面是跳过第1行的代码。注意'Target'的.Row和.Column属性。

 Option Explicit Public precedent Private Sub Worksheet_Change(ByVal Target As Range) Debug.Print Target.Column Debug.Print Target.Row If Target.Row <> 1 Then If Not Intersect(Target, Me.[D2]) Is Nothing Then If Me.precedent <> Me.[D2].Value Then Me.[F2] = "" Me.[H2] = "" Me.precedent = Me.[D2].Value End If End If End If End Sub 

我想你需要这个:

 Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Then Exit Sub If Me.Cells(Target.Row, 4) = "" Then Me.Cells(Target.Row, 6) = "" Me.Cells(Target.Row, 8) = "" End If End Sub