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
Другие вопросы по тегам