我对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行之外的每一行上运行,因为这是我的标题。
我该怎么做?我会使用循环吗?
答案 0 :(得分:4)
不应该这么复杂。只需检查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
如果有帮助,请告诉我们。
答案 1 :(得分:1)
你不必使用循环。由于您要省略第一行,因此应设置希望此代码在修改时触发的范围。目前,您仅针对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
答案 2 :(得分:0)
下面是跳过第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
答案 3 :(得分:-1)
我认为你需要这个:
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