如果特定单元格的值发生更改,则仅清除该行中单元格值发生更改的那一行中的内容

时间:2018-10-22 05:45:48

标签: excel vba excel-vba excel-formula excel-2010

我正在尝试构建一个代码,如果单元格中有更改,则仅在单元格值更改的地方清除该行中的内容。 这是我的代码,

   Private Sub Worksheet_Change(ByVal Target As Range)

     Dim KeyCells As Range

     Set KeyCells = Range("I1:I209")

     If Not Application.Intersect(KeyCells, Range(Target.Address)) _
     Is Nothing Then

     If MsgBox("ARE YOU SURE, YOU WANT TO DELETE?", vbYesNo + vbQuestion) = vbNo Then Exit Sub
       'WHAT SHOULD BE CODE TO DELETE CONTENTS FROM THAT ROW FROM WHICH CELL VALUE CHANGED
     End If

    End Sub

任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

使用EntireRow对象的Range属性获取Target行范围:

 Target.EntireRow.ClearContents

仅清除更改的单元格时:

Target.ClearContents

如果要清除与更改的单元格相同的行中的B至,J至M和Q至S列中的单元格,则:

Intersect(Target.EntireRow, Range("B:D, J:M ,Q:S")).ClearContents

在所有情况下,您都应按照吉普(Jeeped)在其回答中显示的代码进行处理,即:

  • 通过将清除代码beteeen Worksheet_ChangeApplication.EnableEvents = False

  • 封闭起来,确保清除不会在无限循环中触发Application.EnableEvents = True事件
  • 通过在Application.EnableEvents = True之前放置On Error GoTo safe_exit语句并将Application.EnableEvents = False移到{之后,确保任何可能的错误不会阻止表单到达Application.EnableEvents = True语句{1}}语句

答案 1 :(得分:1)

尝试

Private Sub Worksheet_Change(ByVal Target As Range)

     If Not Intersect(Range("I1:I209"), Target) Is Nothing Then

        If MsgBox("ARE YOU SURE, YOU WANT TO DELETE?", vbYesNo + vbQuestion) <> vbYes Then
            Exit Sub
        Else
            On Error GoTo safe_exit
            Application.EnableEvents = False
            Dim t As Range
            For Each t In Intersect(Range("I1:I209"), Target)
                intersect(range("B:D,J:M,Q:S"), t.EntireRow).ClearContents
            Next t
     End If

safe_exit:
    Application.EnableEvents = true

End Sub