Кнопка, которая запускает макрос, назначенный ячейкам в этой строке - PullRequest
0 голосов
/ 10 января 2020

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

У меня есть код для отправки электронного письма, но на данный момент знаю только, как связать его напрямую с определенными ячейками, например, A1, B1, C1.

Sub Email_From_Excel_Basic()

Dim emailApplication As Object
Dim emailItem As Object

Set emailApplication = CreateObject("Outlook.Application")
Set emailItem = emailApplication.CreateItem(0)

' Now we build the email.

emailItem.to = Range("A1")

emailItem.Subject = Range("B1")

emailItem.Body = Range("C1")

emailItem.Display

Set emailItem = Nothing
Set emailApplication = Nothing

End Sub

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

Любая помощь будет оценена.

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 января 2020

ActiveSheet.Buttons(Application.Caller) дает вам свойства кнопки, которые вы можете использовать для поиска строки, под которой она находится.

Sub Email_From_Excel_Basic()

 Dim emailApplication As Object
 Dim emailItem As Object

 Set emailApplication = CreateObject("Outlook.Application")
 Set emailItem = emailApplication.CreateItem(0)

 ' Now we build the email.
 Set n = ActiveSheet.Buttons(Application.Caller)
 Dim num As String
 num = n.TopLeftCell.Row

 emailItem.to = Range("A" & num)
 emailItem.Subject = Range("B" & num)
 emailItem.Body = Range("C" & num)

 emailItem.Display


 Set emailItem = Nothing
 Set emailApplication = Nothing

End Sub
0 голосов
/ 10 января 2020

Я бы рекомендовал иметь одну кнопку и активировать ее в активной строке. Вы можете выбрать нужную строку на листе, а затем нажать кнопку. Атрибут ActiveCell.row подтянет ваш выбор. Функция ws.Cells принимает аргументы для строки и столбца. Используйте ActiveCell.row для указания строки при жестком кодировании столбцов для выбора нужных ячеек.

Использование Active<anything> может привести к затруднениям с некоторыми макросами, но пока кнопка и данные находятся на одном и том же рабочий лист, с тобой должно быть все в порядке.

Dim ws As Worksheet
Dim row As Integer

Set ws = ActiveSheet
row = ActiveCell.row

emailItem.to = ws.Cells(row, 1)
emailItem.Subject = ws.Cells(row, 2)
emailItem.Body = ws.Cells(row, 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...