VBA получает номер столбца из Target при изменении листа
У меня есть таблица значений, которую мне нужно заполнить с помощью функции изменения рабочего листа. Что я пытаюсь сделать, это изменить ячейку в столбцах BG, в зависимости от того, где находится цель.
Private Sub Worksheet_Change(ByVal Target As Range)
If (Not Intersect(Target, Range(Cells(12, 2), Cells(14, 7))) Is Nothing) Then
Cells(16,Application.WorksheetFunction.Column(Target))="Hello"
End If
End Sub
У меня есть аналогичные фрагменты кода в той же подпункте worksheet_change, которые отлично работают при использовании Target.Offset(1,0)
но так как мой возможный целевой диапазон находится в более чем 1 строке, я не знаю, как сделать так, чтобы это всегда была строка 16 и тот же столбец, что и цель....
1 ответ
Вам нужно иметь дело с ситуациями, когда Target - это больше, чем одна ячейка, и отключать обработку событий, поэтому при изменении значения на рабочем листе Worksheet_Change не пытается работать поверх самого себя.
Это поместит "привет" в ячейку сразу справа от любой ячейки в пределах B:G, которая изменяется; по сути, вы добавляете "привет" в столбцы C:H в соответствующей строке каждой ячейки в Target.
Private Sub Worksheet_Change(ByVal Target As Range)
if not intersect(target, Range(Cells(12, "B"), Cells(14, "G"))) is nothing then
on error goto safe_exit
application.enableevents = false
dim t as range
for each t in intersect(target, Range(Cells(12, "B"), Cells(14, "G")))
t.Offset(1,0) = "hello"
next t
End If
safe_exit:
application.enableevents = true
End Sub