清空修改的单元格的同一行中的特定单元格
我对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.Row
和Target.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