#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