VBA получает номер столбца из Target при изменении листа - PullRequest
0 голосов
/ 10 октября 2018

У меня есть таблица значений, которую нужно заполнить с помощью функции изменения рабочего листа.То, что я пытаюсь сделать, это изменить ячейку в столбцах 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 Ответ

0 голосов
/ 10 октября 2018

Вам нужно иметь дело с ситуациями, когда 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
...