{Excel} Несколько командных кнопок для отправки разных строк по электронной почте - PullRequest
0 голосов
/ 12 апреля 2019

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

Когда команда склада вводит соответствующие данные в лист, я хочу, чтобы в конце каждой строки была кнопка, которая при нажатии отправляла по электронной почте лицам, владеющим учетной записью поставщика, всю строку, на которой находится кнопка (A2 : O2) для кнопки один, (A3: O3) для кнопки два и так далее. было бы по крайней мере 2000 строк, которые будут нуждаться в этом.

Теперь я написал код VBA, который способен на это (я признаю, что это действительно уродливый способ выстроить строку и заголовки в ряд), но только для первой строки. Я мог бы сделать это для 2000 строк, но это означает, что нужно сделать 2000 кнопок и изменить код VBA 2000 раз только для изменения ряда ячеек.

Есть ли альтернативный способ заполнить желаемое автоматическое электронное письмо, когда команда заполняет новую строку?

'' '

Private Sub Worksheet_BeforeDoubleClick

(ByVal Target As Range, Cancel As Boolean)

If Not Intersect(Target, Range("O2:O10000")) Is Nothing Then [P2: P10000]

Dim xOutApp As Object

Dim xOutMail As Object

Dim xMailBody As String


On Error Resume Next

Set xOutApp = CreateObject("Outlook.Application")

Set xOutMail = xOutApp.CreateItem(0)

xMailBody = [A1] & "               " & [B1] & "                    " & [c1] & "                  " & [d1] & "                  " & [e1] & "                  " & [G1] & "                   " & [H1] & "                        " & [J1] & "                                               " & [L1] & vbNewLine & "          " & [A2] & "                           " & [B2] & "                     " & [c2] & "                      " & [d2] & "                               " & [e2] & "                                " & [G2] & "                                              " & [H2] & "                                      " & [J2] & "                      " & [L2]

В случае ошибки Продолжить Далее

With xOutMail

    .To = [O2]

    .CC = ""

    .BCC = ""

    .Subject = "NEW MATERIAL ADDED TO 2200 LIST"

    .Body = xMailBody

    .send   'or use .Send

End With

On Error GoTo 0

Set xOutMail = Nothing

Set xOutApp = Nothing

End Sub

1 Ответ

0 голосов
/ 12 апреля 2019

вместо кнопки вы можете использовать двойной щелчок на ячейке.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("B6:B10000")) Is Nothing Then ' cells where u want to double click


    ' your code
    ' call your sub or function
    End If
End Sub

вы можете поместить символ в эти ячейки, например квадрат или что-то еще (используйте шрифт Webdings), а когда пользователь дважды щелкнетВ этой ячейке вы получаете адрес (Target) и отправляете его вашему югу.

удачи

Обновление:

вам нужно создать переменную с номером строки, используяtarget.row, вот так

.....

If Not Intersect(Target, Range("O2:O10000")) Is Nothing Then [P2: P10000]

   lineNumber=target.row

Dim xO

....

, а затем вам нужно сослаться на ячейки с этой переменной.Я считаю, что с короткой ссылкой вы не можете поместить переменную, поэтому вы должны изменить ее на диапазон, например

изменить [A2] на диапазон ("A" и номер строки)

изменить [B2] диапазон ("B" и номер строки)

и т. д.

удачи

...