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

时间:2014-02-28 16:20:08

标签: excel vba excel-vba excel-2007

我对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行之外的每一行上运行,因为这是我的标题。

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

4 个答案:

答案 0 :(得分:4)

不应该这么复杂。只需检查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

如果有帮助,请告诉我们。

答案 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