Код запуска при вводе данных в один столбец

#excel #vba

#excel #vba

Вопрос:

Я хочу, чтобы этот код работал, только если я ввожу данные в столбец AE.

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    Set KeyCells = Range("AE16:AE10000")
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
      Is Nothing Then
        If Not IsEmpty(Target.Value) Then
            HideRuler (Target.Value)
        End If
    End If
End Sub
  

Комментарии:

1. Вместо Range(Target.Address) , вы можете написать непосредственно target в Intersect . Но помимо этого, код должен работать по мере необходимости. Однако вы вызываете процедуру с именем HideRuler , название предполагает, что это что-то скрывает, но вы никогда не вызываете что-то подобное ShowRuler , так что, возможно, это ваша проблема.

2. привет, спасибо, но я нашел ответ на другой вопрос, благодаря Santosh. мне просто нужно ввести «При возобновлении ошибки далее», и это отлично работает

3. Нет, это не так. Он по-прежнему работает не так, как раньше, но теперь вы об этом не знаете.

4. Итак, что вы предлагаете мне сделать с моим кодом?

5. Это зависит от того, что должен делать этот код. При Worksheet_Change вызове Target может быть одна ячейка или диапазон. Вы сами решаете, какую логику вы хотите использовать при обработке этого.

Ответ №1:

Что-то вроде этого должно работать (возможно, в зависимости от того, что делает HideRuler)

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, c As Range

    Set rng = Application.Intersect(Me.Range("AE16:AE10000"), Target.Address)
    If rng Is nothing Then Exit Sub 'no cells to process
    
    'loop over all changed cells
    For Each c in rng.Cells
        If Len(c.Value) > 0 Then HideRuler c.Value
    End If
End Sub