Значение ячейки зависит от активной ячейки - PullRequest
1 голос
/ 30 мая 2020

Не уверен, возможно ли это, но здесь так много креативов, что я подумал, что спрошу, у меня есть список клиентов с адресами электронной почты и суммами, которые они должны в таблице.

Я хочу выбрать ячейка с именем клиента (активная ячейка "A1") и еще одна ячейка, допустим, K2 показывает адрес электронной почты этого клиента. Я хотел бы, чтобы в одной и той же ячейке K2 всегда отображались адреса электронной почты клиентов, имя которых выбрано.

Затем я могу создать 1 кнопку, которая считывает эту ячейку (k2) и использует ее как «электронное письмо для». В противном случае у меня будут сотни кнопок электронной почты, по одной для каждого клиента. Я пробовал несколько кодов в Интернете, но не могу понять.

Позже я хочу немного усложнить, добавив их данные в 1 гиперссылку (для предварительного заполнения формы), но, надеюсь, если смогу Получите основы прямо выше, я могу сделать все остальное.

Любая помощь очень ценится.

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Это не совсем то, что вы описали, но вы можете использовать событие SelectionChange, чтобы установить значение K2 на основе последней выбранной ячейки в столбце A:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Rows.Count > 1 Then Exit Sub
    If Target.Columns.Count > 1 Then Exit Sub
    If Target.Column = 1 Then Range("K2").Value = Target.Offset(0, 1).Value
End Sub

Этот код предполагает, что у вас есть имена в столбце A (Target.Column = 1) и адреса электронной почты в столбце B (Target.Offset (0,1)).

Если вы выберете одну ячейку в столбце A, для K2 будет установлено соответствующее значение из столбца B .

Если вы выберете несколько ячеек в столбце A или выберите ячейки вне столбца A, обработчик события SelectionChange ничего не сделает, и K2 сохранит последнее значение.

0 голосов
/ 30 мая 2020

Я предлагаю здесь более сложное решение. Преимущество этого метода в том, что вы можете выбирать любые ячейки в строке ваших данных, и он ограничен определенным диапазоном c, что может улучшить вашу скорость.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rngData As Range
    Set rngData = Range("A2:D20") 'This is the range that holds your data
    'If you not selected anything in this range, there is nothing to do, leave the sub
    If Intersect(Target, rngData) Is Nothing Then Exit Sub

    'I think it is a good practice to turn off the possible other events, though you not need it now
    Application.EnableEvents = False
    ' Define in which column is the data you would like to put in K2
    Dim iColumnOfEmailAddress As Long
    iColumnOfEmailAddress = 2
    Range("K2").Value2 = Cells(Target.Row, iColumnOfEmailAddress).Value2
    Application.EnableEvents = True 'turn the events back
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...