очистка содержимого на основе другой ячейки - PullRequest
0 голосов
/ 04 мая 2018

Я ищу способ очистить содержимое определенной ячейки в зависимости от значения в другой ячейке:

Private Sub Worksheet_Change2(ByVal Target As Range)
     If Range("AL4").Value = 1 Then
        Range("AK15").Select
        Selection.ClearContents
     If Range("AL4").Value = 2 Then
        Range("AK15").Select
        Selection.ClearContents
End Sub

Это как-то не работает, есть идеи?

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Есть несколько проблем с вашим кодом:

  • Worksheet_Change2 - это имя вашего кода, которое не будет работать так же, как Worksheet_Change
  • Вы не используете Target для определения диапазона, который вы хотите проверить на изменения. Изменить If Range("AL4").Value = 1 на:

    If not Intersect(Target, Range("AL4")) Is Nothing Then 
       If Range("AL4").Value = 1 or Range("AL4").Value = 2 Then
           Range("AK15") = ""
       End If
    End if
    

Используя эту проверку на наличие изменений, вы можете реализовать ее в уже существующем модуле Worksheet_Change и запускать ее только при изменении значения ячейки AL4.

Если вы хотите прочитать о событии смены листа, я предлагаю прочитать эту страницу с ozgrid.com

0 голосов
/ 04 мая 2018

Элла -

Ниже следует решить, что вы пытаетесь достичь

If Range("AL4").Value = 1 Or 2 Then
    Range("AK15") = ""
End If

или

If Range("AL4").Value = 1 Or 2 Then
    Range("AK15").ClearContents
End If

Вы хотите попробовать и не использовать функцию SELECT, так как это сильно замедлит обработку

0 голосов
/ 04 мая 2018

В вашем коде есть несколько проблем:

  • В имени метода есть 2, которых не должно быть. Имя является значимым в этом случае
  • Вам не хватает двух End Ifs
  • Чтобы избежать каскадных событий, вам нужно отключить события перед изменением значений
  • Не использовать Select. Это работает, но это доставит вам неприятности

Это сумма до

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Range("AL4").Value = 1 Then
            Range("AK15").ClearContents
    End If
    If Range("AL4").Value = 2 Then
            Range("AK15").ClearContents
    End If
    Application.EnableEvents = True
End Sub
...