Если значение конкретной ячейки изменилось, очистите содержимое только от той строки, из которой изменилось значение ячейки. - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь создать код, в котором, если есть изменение в ячейке, очищать содержимое из этой строки только там, где изменилось значение ячейки.Вот мой код,

   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 голосов
/ 22 октября 2018

Попробуй,

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
0 голосов
/ 22 октября 2018

Используйте 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, т.е.:

  • убедитесь, что очистка не запускает событие Worksheet_Change в бесконечном цикле, заключив код очистки между Application.EnableEvents = False и Application.EnableEvents = True

  • убедитесь, что любая возможная ошибка не мешает форме достигать оператора Application.EnableEvents = True, поместив оператор On Error GoTo safe_exit перед Application.EnableEvents = False и переместив Application.EnableEvents = True сразу после оператора safe_exit:

...